2015-06-02 96 views
6

我有字符串压倒一切的方法,它返回字符串中的格式:我想字符串内容分成两个部分如何在第一个逗号前分割字符串?

"abc,cde,def,fgh" 

:第一逗号之前

  1. 字符串和

  2. 第一个逗号后面的字符串

我的最主要的方法是:

@Override 
protected void onPostExecute(String addressText) { 

    placeTitle.setText(addressText); 
} 

现在我该怎样分割字符串成两个部分,这样我就可以使用它们设置在两个不同的TextView的文本?

回答

12

您可以使用下面的代码片段 -

String str ="abc,cde,def,fgh"; 
String kept = str.substring(0, str.indexOf(",")); 
String remainder = str.substring(str.indexOf(",")+1, str.length);    
+0

我试过这段代码,并为我工作@Razib正确的s到strr。 –

5
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` 

如果你只想要cde作为第一个逗号后面的字符串。 然后你可以使用

String splitted[] =s.split(",",3); // will be matched 2 times 

或不限制

String splitted[] =s.split(","); 

不要忘记检查length避免ArrayIndexOutOfBound

+1

分裂[1]在第一个逗号之后将不会返回完整的字符串 – Arjit

+0

OP说:'2)第一个逗号后的字符串“这是什么意思?如果有像'abc,cde,def,fgh'这样的输入,那么我会看到'splitted [1]'会返回'cde'不是吗? @Arjit – Saif

+1

没有@saif你错了。 _splitted [1] _将有cde和Op想要拥有_cde,def,fgh_也希望你读到这个问题**我想将字符串Content分解成两部分** –

2
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())); 
2

下面是你正在寻找什么:

public String[] split(",", 2) 

这会给2字符串数组。斯普利特two versions.什么,你可以尝试是

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 
1
// 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]); 

有关详细信息,请参阅本documentation

1

使用分裂与正则表达式:

String splitted[] = addressText.split(",",2); 
System.out.println(splitted[0]); 
System.out.println(splitted[1]); 
0

jse1.4String - 两个split方法是新的。 subSequence方法已被添加,正如String现在实现的CharSequence接口所要求的那样。已添加三种其他方法:matches,replaceAllreplaceFirst

使用Java String.split(String regex, int limit)Pattern.quote(String s)

字符串 “BOO:和:foo” 的,例如,产生具有这些参数的如下结果:

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); 
} 

我有脸在URL参数中的同样的问题,为了resoleve它,我需要根据第一个?拆分因此,剩余字符串包含参数值,他们需要根据&拆分。

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); 
} 

Run Javascript on the JVM with Rhino/Nashorn«使用JavaScript的String.prototype.split功能:

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", ""] 
0

:在这种情况下,你可以使用replaceAll一些正则表达式来得到这个输入这样你就可以使用:

System.out.println("test another :::"+test.replaceAll("(\\.*?),.*", "$1")); 

如果密钥仅仅是一个字符串可以使用(\\D?),.*

System.out.println("test ::::"+test.replaceAll("(\\D?),.*", "$1")); 
相关问题