J'ai une méthode de substitution avec String qui renvoie String au format suivant:
"abc,cde,def,fgh"
Je veux diviser le contenu de la chaîne en deux parties:
Chaîne avant la première virgule et
Chaîne après la première virgule
Ma méthode dominante est:
@Override
protected void onPostExecute(String addressText) {
placeTitle.setText(addressText);
}
Maintenant, comment diviser la chaîne en deux parties, de sorte que je puisse les utiliser pour définir le texte dans deux TextView
différents?
Vous pouvez utiliser l'extrait de code suivant -
String str ="abc,cde,def,fgh";
String kept = str.substring( 0, str.indexOf(","));
String remainder = str.substring(str.indexOf(",")+1, str.length);
String splitted[] =s.split(",",2); // will be matched 1 times.
splitted[0] //before the first comma. `abc`
splitted[1] //the whole String after the first comma. `cde,def,fgh`
Si vous voulez seulement cde
comme chaîne après la première virgule ..__, alors vous pouvez utiliser
String splitted[] =s.split(",",3); // will be matched 2 times
ou sans limite
String splitted[] =s.split(",");
N'oubliez pas de cocher la length
pour éviter ArrayIndexOutOfBound
.
String s =" abc,cde,def,fgh";
System.out.println("subString1="+ s.substring(0, s.indexOf(",")));
System.out.println("subString2="+ s.substring(s.indexOf(",") + 1, s.length()));
Le ci-dessous est ce que vous recherchez:
public String[] split(",", 2)
Cela donnera 2 tableau de chaîne. Split a deux versions. Ce que tu peux essayer c'est
String str = "abc,def,ghi,jkl";
String [] twoStringArray= str.split(",", 2); //the main line
System.out.println("String befor comma = "+twoStringArray[0]);//abc
System.out.println("String after comma = "+twoStringArray[1]);//def,ghi,jkl
// Note the use of limit to prevent it from splitting into more than 2 parts
String [] parts = s.split(",", 2);
// ...setText(parts[0]);
// ...setText(parts[1]);
Pour plus d'informations, reportez-vous à cette documentation .
Utilisez split avec regex:
String splitted[] = addressText.split(",",2);
System.out.println(splitted[0]);
System.out.println(splitted[1]);
De jse1.4
String
- Deux méthodes split
sont nouvelles. La méthode subSequence a été ajoutée, comme requis par l'interface CharSequence que String implémente maintenant. Trois méthodes supplémentaires ont été ajoutées: matches
, replaceAll
et replaceFirst
.
Utilisation de Java String.split(String regex, int limit)
avec Pattern.quote(String s)
La chaîne "boo: and foo", par exemple, donne les résultats suivants avec ces paramètres:
Regex Limit Result : 2 { "boo", "and:foo" } : 5 { "boo", "and", "foo" } : -2 { "boo", "and", "foo" } o 5 { "b", "", ":and:f", "", "" } o -2 { "b", "", ":and:f", "", "" } o 0 { "b", "", ":and:f" }
String str = "abc?def,ghi?jkl,mno,pqr?stu,vwx?yz";
String quotedText = Pattern.quote( "?" );
// ? - \\? we have to escape sequence of some characters, to avoid use Pattern.quote( "?" );
String[] split = str.split(quotedText, 2); // ["abc", "def,ghi?jkl,mno,pqr?stu,vwx?yz"]
for (String string : split) {
System.out.println( string );
}
J'ai le même problème en ce qui concerne les paramètres d'URL. Pour le résoudre, j'ai besoin de scinder en fonction du premier ?
. Ainsi, la chaîne restante contient les valeurs des paramètres et doit être divisée en fonction de &
.
String paramUrl = "https://www.google.co.in/search?q=encode+url&oq=encode+url";
String subURL = URLEncoder.encode( paramUrl, "UTF-8");
String myMainUrl = "http://example.com/index.html?url=" + subURL +"&name=chrome&version=56";
System.out.println("Main URL : "+ myMainUrl );
String decodeMainURL = URLDecoder.decode(myMainUrl, "UTF-8");
System.out.println("Main URL : "+ decodeMainURL );
String[] split = decodeMainURL.split(Pattern.quote( "?" ), 2);
String[] Parameters = split[1].split("&");
for (String param : Parameters) {
System.out.println( param );
}
Exécuter Javascript sur la machine virtuelle avec Rhino/Nashorn «With JavaScript’s String.prototype.split
function:
var str = "abc?def,ghi?jkl,mno,pqr?stu,vwx?yz";
var parts = str.split(',');
console.log( parts ); // (5) ["abc?def", "ghi?jkl", "mno", "pqr?stu", "vwx?yz"]
console.log( str.split('?') ); // (5) ["abc", "def,ghi", "jkl,mno,pqr", "stu,vwx", "yz"]
var twoparts = str.split(/,(.+)/);
console.log( parts ); // (3) ["abc?def", "ghi?jkl,mno,pqr?stu,vwx?yz", ""]
console.log( str.split(/\?(.+)/) ); // (3) ["abc", "def,ghi?jkl,mno,pqr?stu,vwx?yz", ""]
: Dans ce cas, vous pouvez utiliser replaceAll avec des regex pour obtenir cette entrée et utiliser:
System.out.println("test another :::"+test.replaceAll("(\\.*?),.*", "$1"));
Si la clé est juste un String, vous pouvez utiliser (\\D?),.*
System.out.println("test ::::"+test.replaceAll("(\\D?),.*", "$1"));
public static int[] **stringToInt**(String inp,int n)
{
**int a[]=new int[n];**
int i=0;
for(i=0;i<n;i++)
{
if(inp.indexOf(",")==-1)
{
a[i]=Integer.parseInt(inp);
break;
}
else
{
a[i]=Integer.parseInt(inp.substring(0, inp.indexOf(",")));
inp=inp.substring(inp.indexOf(",")+1,inp.length());
}
}
return a;
}
J'ai créé cette fonction. Les arguments sont chaîne d'entrée (Chaîne inp, ici) et valeur entière (int n, ici) , qui est la taille d'un tableau contenant les valeurs en chaîne séparées par des virgules. Vous pouvez utiliser un autre caractère spécial pour extraire des valeurs d'une chaîne contenant ce caractère. Cette fonction renverra un tableau d'entier de taille n.
Utiliser ,
String inp1="444,55";
int values[]=stringToInt(inp1,2);