1

「。」ごとに文字列を分割しようとしています。また "?" そして、私はこの正規表現を使用します:

(?<=(?!.[0-9])[?.])

理論的には、ポイントの後に数字が続く場合、コードは分割も防止するため、3.000 などは分割されず、新しい文字列にもポイントが含まれます。

たとえば、「こんにちは。お気に入りの数字は何ですか? 3.560 です」というテキストがあるとします。「こんにちは」、「好きな数字は?」、「3.560 です。」

私は自分のコンピューターで簡単なJavaプログラムを作成しましたが、それは私が望むように動作します:

String[] x = c.split("(?<=(?!.[0-9])[?.])");
for(String v : x){
    System.out.println(v);
}

ただし、Android アプリでこの同じ正規表現を使用すると、何も分割されません...

x = txt.split("(?<=(?!.[0-9])[?.])");
//This, in my android app, returns an array with only one entry which is the whole string without splitting.

PS。(?<=[?.]) を使用すると機能するため、問題は (?!.[0-9]) の部分にある必要があります。これは、ポイントとそれに続く数字を除外することを意図しています。

4

3 に答える 3

4

正規表現パターンを使用

(?:(?<=[.])(?![0-9])|(?<=[?]))

str.split("(?:(?<=[.])(?![0-9])|(?<=[?]))");
于 2012-11-18T15:44:20.507 に答える
2

角括弧文字クラスの外側で.は、正規表現は任意の1 文字を意味することに注意してください。リテラルのドットに一致する必要があります。これは、文字列リテラルで\.必要であることを意味します。\\.

于 2012-11-18T15:30:42.083 に答える
1

これを試して。

public class Tester {

    public static void main(String[] args){
        String regex = "[?.][^\\d]";
        String tester = "Testing 3.015 dsd . sd ? sds";
        String[] arr = tester.split(regex);
        for (String s : arr){
            System.out.println(s);
        }
    }

}

出力:

Testing 3.015 dsd 
sd 
sds
于 2012-11-18T15:51:17.340 に答える