2

I have strings of the form:

"abc" 1 2 1 13 
"efgh" 2 5 

Basically, a string in quotes followed by numbers separated by whitespace characters. I need to extract the string and the numbers out of the line.

So for eg., for the first line, I'd want

  • abc to be stored in a String variable (i.e. without the quotations) and
  • an array of int to store [1,2,1,13].

I tried to create a pattern that'd do this, but I'm a little confused.

Pattern P = Pattern.compile("\A\".+\"(\s\d+)+");

Not sure how to proceed now. I realized that with this pattern I'd kinda be extracting the whole line out? Perhaps multiple patterns would help?

Pattern P1 = Pattern.compile("\A\".+\"");
Pattern P2 = Pattern.compile("(\s\d+)+");

Again, not very sure how to get the string and ints out of the line though. Any help is appreciated!

4

4 に答える 4

1

キャプチャ グループを使用して両方の部分を一度に取得してから、数値をスペースで分割します。

Pattern pattern = Pattern.compile("\"([^\"]*)\"\\s*([\\d\\s]*)");

Matcher m = pattern .matcher(input);
while (m.find()) {
    String str = m.group(1);
    String[] numbers = m.group(2).split("\\s");
    // process both of them       
}

正規表現の括弧の各セットは、後で 1 つに対応しgroupます (開始括弧を左から右に数えます1)。

于 2012-11-08T10:00:12.577 に答える
1

複雑な正規表現を作成するのではなく、スペースで文字列を分割しPatternMatcherクラスで使用します。

このようなもの: -

String str = "\"abc\" 1 2 1 13 ";
String[] arrr = str.split("\\s");
System.out.println(Arrays.toString(arrr));

出力: -

["abc", 1, 2, 1, 13]

あなたが何をしたいのか、あなたの意図をより明確に示します。

次に、文字列配列からstringandの部分を取得できます。整数要素に対してintegera を実行する必要があります。Integer.parseInt()


文字列にスペースが含まれる可能性がある場合は、Regex. より良い人が@m.buettner's 答えた人でしょう

于 2012-11-08T09:58:06.747 に答える
0
StringTokenizer st = new StringTokenizer(str,"\" ");
String token = null;
String strComponent = null;
int num[] = new int[10]; // can change length dynamically by using ArrayList
int i = 0;
int numTemp = -1;
while(st.hasMoreTokens()){
    token = st.nextToken();

    try{
        numTemp  = Integer.parseInt(token);
        num[i++] = numTemp ;
    }catch(NumberFormatException nfe){
        strComponent = token.toString();
    }
于 2012-11-08T10:13:41.727 に答える
0

これを試してみてください。文字列と整数の両方も分離されます

        String s = "\"abc\" 1 2 1 13 ";

        s = s.replace("\"", "");
        String sarray[] = s.split(" ");

        int i[] = new int[10];
        String si[] = new String[10];
        int siflag = 0;
        int iflag = 0;
        for (String st : sarray) {
            try {
                int ii = Integer.parseInt(st)
                i[iflag++] = ii;
            } catch (NumberFormatException e) {
                si[siflag++] = st;
            }
        }
于 2012-11-08T10:04:09.763 に答える