2017-04-08 16 views
-1

私はプログラミングを初めて行っています。
私は3つの部分にこの文字列を分割する必要が文字列をJavaの複数のサブ文字列に分割する

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

のような文字列を持っています。誰かが私を助けてください、私は期待してい
出力は

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

です。

+0

あなたは、少なくともしようとしましたか? –

+0

はい私はしました。私はsplit( "\\ |")を使って文字列を2に分割しました。出力はabc {123 {asdとxyz {456}です。 –

答えて

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

あなたは3つの他の人にあなたの文字列値を切り捨てるために、コードを使用しようとしている場合は、私はこれを見るでしょう:Cut Java String at a number of character。この資料では、文字列を切り捨てる方法について説明します。

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

ouputを、それもなく文字列より、文字列の連結のためのStringBuilderを使用する方が効率的であろうと

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

注)です。

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

OUTPUT
SHA
ASD
SHA1
ZXC

+0

期待どおりの正しい出力ですか?もしそうなら、それは誰もあなたの元の投稿から推測できるものではないので、前に私たちに語ったことがあります。 –

関連する問題