1

文字列を2つの可能なデリメータ「/」または「//」のリストに分割したいと思います。しかし、それ以上に、デリメータも同じリストに入れる必要があります。GuavaのSplitterまたはjava.util.Scannerではこれを行うことができません。

Scanner s = new Scanner(str);
s.useDelimiter("//|/");
while (s.hasNext()) {
    System.out.println(s.delimiter());
    System.out.println(s.next());
}

s.delimiter()を返します//|/。取得したい/または//

これを実行できる他のライブラリを知っていますか?

私はいくつかのコードを書きました、そしてそれは働きます、しかしそれはあまり良い解決策ではありません:

public static ArrayList<String> processString(String s) {
    ArrayList<String> stringList = new ArrayList<String>();
    String word = "";
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == '/' && i < s.length() && s.charAt(i + 1) == '/') {
            if (!word.equals(""))
                stringList.add(word);
            stringList.add("//");
            word = "";
            i++;
        } else if (s.charAt(i) == '/') {
            if (!word.equals(""))
                stringList.add(word);
            stringList.add("/");
            word = "";
        }else{
            word = word + String.valueOf(s.charAt(i));
        }
    }
    stringList.add(word);
    return stringList;
}

返品"some/string//with/slash/or//two"リストにsome, /, string, //, with, /, slash, /, or, //, two

返品"/some/string//with/slash/or//two"リストに/, some, /, string, //, with, /, slash, /, or, //, two

返品"//some/string//with/slash/or//two"リストに//, some, /, string, //, with, /, slash, /, or, //, two

4

2 に答える 2

5

The useDelimiter method has a signature that takes a Pattern object, instead of a String.

You should use that one instead:

Scanner s = new Scanner(str);
s.useDelimiter(Pattern.compile("/{1,2}"));
while (s.hasNext()) {
    System.out.println(s.delimiter());
    System.out.println(s.next());
}

In order to capture the delimiter, you're going to need to change your approach.

Pattern p = new Pattern("(/{0,2})([^/]+)");
Matcher m = p.matcher(str);
while(m.find()) {
   String token     = m.group(2);
   String delimiter = m.group(1); // (preceding delimiter. may be null)
   /*
    * ...
    */
}
于 2012-10-29T17:36:57.803 に答える
0

This seems like a good candidate to use regular expressions. You can read more about Java regular expressions here.

于 2012-10-29T17:37:00.610 に答える