2017-04-08 185 views
-1

我是编程新手。
我有这样在java中将字符串分割成多个子字符串

String input="|abc{123{asd|xyz{456{qwe"; 

我具有与本字符串分割成3份的字符串。
我期待的输出是

string1={"abc","xyz"} 
no={"123","456"} 
string2={"asd","qwe"} 

可有人请帮助我。

+0

你至少尝试? –

+0

是的,我做到了。我使用split(“\\ |”)将字符串拆分为2.我得到了输出abc {123 {asd和xyz {456 {qwe。 –

回答

0

您可以使用以下方法:

substring(int beginIndex, int endIndex) //Returns a new string that is a substring of this string.

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html)为了将一个字符串分解。

试试这个:

String input = "|abc{123{asd|xyz{456{qwe"; 
//input length 
int length= input.length(); 
int parts = length/3; 

//three substrings 
String s1 = input.substring(0, parts); 
String s2 = input.substring(parts, 2*parts); 
String s3 = input.substring(2*parts, length); 
System.out.println("s1: "+s1+"\ns2: "+s2+"\ns3: "+s3); 

Output is: 
s1: |abc{123 
s2: {asd|xyz 
s3: {456{qwe 
+0

但是我不能使用这个,如果索引是未知的 –

+0

所以你有一个未知长度和内容的字符串,你想分成3部分? –

+0

是的,这是正确的。 –

0

如果我们假设,我们应该通过拆分或者{|的字符串,可以拿出类似的像我一样的东西(这不是一个最佳的解决方案,我没有测试过的所有角落的情况,但在这里是)

public static void main(String[] args) { 

     String input="|abc{123{asd|xyz{456{qwe"; 

     List<String> lettersFirst = new ArrayList<String>();/delimiter/ | 
     List<String> lettersSec = new ArrayList<String>();// delimiter { 
     List<String> numbers = new ArrayList<String>();//delimiter either { or | 

     char[] inputChars = input.toCharArray(); 

     for(int i=1; i<inputChars.length;i++){ 

      if(Character.isLetter(inputChars[i])){ 
       if(inputChars[i-1]=='|') 
        lettersFirst.add(GetStringUntilDelim(inputChars, i)); 
       else if (inputChars[i-1]=='{') 
        lettersSec.add(GetStringUntilDelim(inputChars, i)); 
      }else if(Character.isDigit(inputChars[i])){ 
       if(inputChars[i-1]=='|' || inputChars[i-1]=='{') 
       numbers.add(GetStringUntilDelim(inputChars, i)); 
      } 
     } 

     //now format the final strings 
     String s1 = "{ ", s2 = "{ ", s3 = "{ "; 

     for(int i=0; i<lettersFirst.size();i++){ 

      s1 = s1 + lettersFirst.get(i); 
      s1 = s1 + ","; 
     } 
     s1 = s1.substring(0,s1.length()-1);//remove the last comma 
     s1 = s1 +" }"; 

for(int i=0; i<lettersSec.size();i++){ 

      s2 = s2 + lettersSec.get(i); 
      s2 = s2 + ","; 
     } 
     s2 = s2.substring(0,s2.length()-1);//remove the last comma 
     s2 = s2 +" }"; 

for(int i=0; i<numbers.size();i++){ 

      s3 = s3 + numbers.get(i); 
      s3 = s3 + ","; 
     } 
     s3 = s3.substring(0,s3.length()-1);//remove the last comma 
     s3 = s3 +" }"; 

     System.out.println(s1); 
     System.out.println(s3); 
     System.out.println(s2); 

    } 
    public static String GetStringUntilDelim(char[] inputChars, int index){ 

     String s = ""; 
     int maxIndex = inputChars.length-1; 
     char c; 
     do{ 

     c = inputChars[index++];  
     s = s + c; 
     }while(( c != '|' && c != '{') && index <= maxIndex); 

     s = (index-1) == maxIndex ? s : s.substring(0,s.length()-1); 
     return s; 
    } 

的输出中是

{ abc,xyz } 
{ 123,456 } 
{ asd,qwe } 

注意,这也将是更有效地使用StringBuilder的字符串连接,而不是字符串。

0
String in = "|sha{1234{asd|sha1{4564{zxc"; 
     String[] string1, number, string2; 
     String[] res = in.split("\\|"); 
     string1 = new String[res.length]; 
     number = new String[res.length]; 
     string2 = new String[res.length]; 
     for (int i1 = 1; i1 < res.length; i1++) { 
      String[] temp = res[i1].split("\\{"); 
      string1[i1] = temp[0]; 
      number[i1] = temp[1]; 
      string2[i1] = temp[2]; 
     } 
     for (int i = 1; i < string1.length; i++) { 
      System.out.println(string1[i]); 
      System.out.println(number[i]); 
      System.out.println(string2[i]); 
     } 

输出
SHA
ASD
SHA1
ZXC

+0

这是预期的/正确的输出?如果是的话,那么你之前可能会告诉我们,因为这不是任何人从你原来的帖子中猜测出来的。 –