7

Google の検索結果のページを調べてみましたが、役に立ちそうなものは見つかりませんでした。

私がやろうとしているのは、文字列を のようBananas22Apples496Pears3に分割し、それをある種の読み取り可能な形式に分解することです。これを行うことはできないのでString.split()、これを達成できる正規表現のスニペットを誰かに教えてもらえないかと思っていました。

少し拡張します: 上記の文字列は次のように分割されます (String[]簡単にするため):

{"Bananas:22", "Apples:496", "Pears:3"}
4

5 に答える 5

4

これを試して

String s = "Bananas22Apples496Pears3";

String[] res = s.replaceAll("(?<=\\p{L})(?=\\d)", ":").split("(?<=\\d)(?=\\p{L})");
    for (String t : res) {
        System.out.println(t);
    }

最初のステップは、空の文字列を「:」に置き換えることです。左側が後読みアサーションのある文字で (?<=\\p{L})右側が先読みアサーション (?=\\d)のある数字です。

次に、左側が数字で右側が文字の場合、結果を分割します。

\\p{L}は、すべての言語のすべての文字に一致するUnicode プロパティです。

于 2012-11-14T07:01:21.627 に答える
3

あなたがする必要がReplaceあり、次にsplit文字列.分割だけではそれを行うことはできません

1> Replace All次の正規表現を含む文字列

(\\w+?)(\\d+)

そしてそれを

$1:$2

2>Split、この正規表現で

(?<=\\d)(?=[a-zA-Z])
于 2012-11-14T06:50:50.333 に答える
1

これはあなたが望むことをするはずです:

import java.util.regex.*;

String d = "Bananas22Apples496Pears3"

Pattern p = Pattern.compile("[A-Za-z]+|[0-9]+");

Matcher m = p.matcher(d);

while (m.find()) {
      System.out.println(m.group());
}

// Bananas
// 22
// Apples
// 496
// Pears
// 3
于 2012-11-14T07:07:37.703 に答える
0

で置き換え\d+:$0から で分割し(?=[a-zA-Z]+:\d+)ます。

于 2012-11-14T06:51:11.503 に答える
0
String myText = "Bananas22Apples496Pears3";
System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,"));
于 2012-11-14T07:29:31.390 に答える