2011-12-27 72 views
-4

我有一个字符串,如my+*%name===is+jhon!#and&*^I$stay===in^&$#@US。我想输出基于一串非alpha字符分割java字符串

s[0]="my" 

s[1]="+*%" 

s[2]="name" 

s[3]="===" 

s[4]="is" 

s[5]="+" 

s[6]="jhon" 

s[7]="!#" 

s[8]="and" 

s[9]="&*^" 

s[10]="I" 

s[11]="$" 

s[12]="stay" 

s[13]="===" 

请注意,它不遵循任何模式和非字母数字字符的一堆变化为字符串将动态数据串

+3

你的问题是什么?你写了什么,你有什么问题?你有没有试过调试你的代码,看看它为什么没有达到你的预期? – 2011-12-27 11:35:14

+1

正如@佩特所说的。 – 2011-12-27 11:38:29

+0

亲爱的彼得 我试过使用拆分,但IAM无法捕捉非字符串字符串。我想要将字母数字和非数字两种字符串都转换为String数组。 String s1 =“my +%name === is + jhon!#and&^ I $ stay === in ^&$#@ US”; \t String [] nowSplit = s1.split(“[^ a-zA-Z0-9]”); \t \t \t \t 为(INT I = 0;我 srini 2011-12-27 11:41:57

回答

0

您可以使用以下方法来分割一串字母字符

void separateMyString(){ 
    String str = "my+%name===is+jhon!#and&^I$stay===in^&$#@US"; 
ArrayList<String> stringdata = new ArrayList<String>(); 
StringBuffer sb = new StringBuffer(); 
boolean isInSameString = true; 
boolean prevStringValue = Character.isLetter(str.charAt(0)); 
for(int i=0; i<str.length(); i++){ 
    isInSameString = (Character.isLetter(str.charAt(i))== prevStringValue) ?true:false; 
    if(i == (str.length() -1)){ 
     isInSameString = false; 
    } 
    prevStringValue = Character.isLetter(str.charAt(i)); 

     if(!isInSameString){ 
      if(i == (str.length() -1)){ 
       sb.append(str.charAt(i)); 
       } 
      stringdata.add(sb.toString()); 
     sb = new StringBuffer(); 
     } 

     sb.append(str.charAt(i)); 

} 
System.out.println("~~~"+stringdata); 
} 

输出= ~~~[my, +%, name, ===, is, +, jhon, !#, and, &^, I, $, stay, ===, in, ^&$#@, US]

+0

亲爱的Sunil 感谢您的宝贵意见,但上述代码中有一个小问题。如果你注意到,最后一个值“US”没有进入输出。最后一部分没有被添加到列表 – srini 2011-12-27 13:03:39

+0

现在检查我的答案。它给你相同的输出,只要你想 – 2011-12-27 13:46:27

+0

非常感谢sunil。它根据需要帮助我 – srini 2011-12-27 13:55:33