2016-05-11 8 views
2

文字列を分割したいが、数字を削除して分割したいが、それに続く文字は指定された数と等しくない。ここで制限のある文字列を分割する

は私のコードです:

public static void main(String[] args) throws IOException { 
    String x = "32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X"; 
    System.out.println(splittedArray(x, "\\s(?<!32)\\s").toString()); 
    // I know this regex is completely wrong. 
} 

private static List<String> splittedArray(String str, String regex) { 
    return Arrays.asList(str.split(regex)); 
} 

良く説明:

サンプル:

32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X 

私はすべての32個の数字と次の文字を使用する場合は、それは返す必要があります:

32 X or 32X // Whatever 
32 X 
32 Y 
32 X 
32 X 

私はそれを動作させるために立ち往生しています、どんな助けも高く評価されます。

+0

***「私はそれが数字を削除し、もちろん分割したい」***、あなたが言う:*** "私はすべての32の数をしたい場合は...' 32 Xまたは32X //何でも '' ***あなたは何を正確に必要としますか? –

+0

文字列 'tokenizer'がすでに問題のために十分であるかもしれません。 – JanLeeYu

+0

'(?:32 \ s \ w)。*?(?: 32 \ s \ w)'は動作するはずです – Natecat

答えて

2

文字列を分割しようとするのではなく、PatternMatcherを使用して対処します。

List<String>に収集する方法を示すコードを更新し、必要に応じてString[]に変換してください。

public static void main(String[] args) 
{ 
    // the sample input 
    String x = "32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X"; 

    // match based upon "32". This specific match can be made into 
    // a String concat so the specific number may be specified 
    Pattern pat = Pattern.compile("[\\s]*(32\\s[^\\d])"); 

    // get the matcher 
    Matcher m = pat.matcher(x); 

    // our collector 
    List<String> res = new ArrayList<>(); 

    // while there are matches to be found 
    while (m.find()) { 
     // get the match 
     String val = m.group().trim(); 
     System.out.println(val); 

     // add to the collector 
     res.add(val); 
    } 

    // sample conversion 
    String[] asArray = res.toArray(new String[0]); 
    System.out.println(Arrays.toString(asArray)); 
} 

サンプル入力に基づいて、返された出力:

32 X
32 X
32 Y
32 X
32 X
[32 X 32 X 32 Y 、32X、32X]

+0

私はリストとしてそれを必要とするので、私はそれを必要とします。 – developer033

+0

@ developer033で、見つかった各エントリを 'ArrayList 'に追加します。 s.o.p()は見つかったテキストを表示します。必要に応じて 'ArrayList ()'を 'String []'に変換することができます。 – KevinO

1

ありがとうhttps://txt2re.com

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Parser { 

    public static void main(String[] args) { 
     String txt="32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X"; 

     String re1="(\\d+)"; // Integer Number 1 
     String re2="(\\s+)"; // White Space 1 
     String re3="(.)"; // Any Single Character 1 

     Pattern p = Pattern.compile(re1+re2+re3,Pattern.CASE_INSENSITIVE | Pattern.DOTALL); 
     Matcher m = p.matcher(txt); 
     while (m.find()) 
     { 
      String int1=m.group(1); //here's the number 
      String c1=m.group(3); //here's the letter 

      if (Integer.parseInt(int1) == 32) { 
       System.out.println(int1.toString()+" "+c1.toString()); 
      } 
     } 
    } 

}