2017-08-07 5 views
2

J'ai les urls suivantes.Comment extraire l'ID de l'URL? Feuille Google

https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY/edit#gid=1842172258 
https://docs.google.com/a/example.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY/edit#gid=1842172258 
https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY 

url Foreach, je dois extraire l'identifiant de feuille: 1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY dans une chaîne de java.

Je pense à l'aide divisé mais il ne peut pas travailler avec tous les tests:

String string = "https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY/edit#gid=1842172258"; 
String[] parts = string.split("/"); 
String res = parts[parts.length-2]; 
Log.d("hello res",res); 

Comment puis-je-ce possible?

+0

Est-ce que l'ID toujours suivre/feuilles de calcul/d /? Si c'est le cas, vous pouvez écrire une regex qui recherche/spreadsheets/d/et ensuite capture le composant suivant. Vous n'avez pas besoin d'utiliser 'split'. Vous pouvez toujours utiliser 'split' et rechercher des éléments de tableau équivalents à" tableurs "et" d ". S'il y a d'autres cas où l'ID ne suit pas cela, vous devrez déterminer quelles sont les possibilités. – ajb

Répondre

1

il ressemble à l'ID que vous la recherche de toujours suivre "/ feuilles de calcul/d /" si elle est le cas, vous pouvez mettre à jour votre code pour que

 String string = "https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY/edit#gid=1842172258"; 
     String[] parts = string.split("spreadsheets/d/"); 
     String result; 
     if(parts[1].contains("/")){ 
      String[] parts2 = parts[1].split("/"); 
      result = parts2[0]; 
     } 
     else{ 
      result=parts[1]; 
     } 
     System.out.println("hello "+ result); 
0

utilisant l'expression rationnelle

Pattern pattern = Pattern.compile("(?<=\\/d\\/)[^\\/]*"); 
Matcher matcher = pattern.matcher(url); 
System.out.println(matcher.group(1)); 

Utilisation de Java

String result = url.substring(url.indexOf("/d/") + 3); 
int slash = result.indexOf("/"); 
result = slash == -1 ? result 
         : result.substring(0, slash); 
System.out.println(result); 
1

Vous pouvez utiliser regex \/d\/(.*?)(\/|$) (regex demo) pour résoudre votre problème, si vous regardez de plus près, vous pouvez voir que l'ID existe entre d/ et / ou end of line pour que vous pouvez obtenir tout entre ce sujet, consultez cette démo de code:

String[] urls = new String[]{ 
    "https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY/edit#gid=1842172258", 
    "https://docs.google.com/a/example.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY/edit#gid=1842172258", 
    "https://docs.google.com/spreadsheets/d/1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY" 
}; 
String regex = "\\/d\\/(.*?)(\\/|$)"; 

for (String url : urls) { 
    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(url); 

    while (matcher.find()) { 
     System.out.println(matcher.group(1)); 
    } 
} 

Sorties

1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY 
1mrsetjgfZI2BIypz7SGHMOfHGv6PTKTzY0xOM5c6TXY 
1mrsetjgfZI2BIypz7SGHMOfHGv6kTKTzY0xOM5c6TXY