0

数千の前に空白を取り除くことができないのはなぜですか?

文字列を double に解析できるかどうかを確認するメソッドを作成しました。

編集:わかりました、誰もが同じ答えを書いているので、メソッドを更新しました-これは異常な状況です

public static boolean isNumber(String test) {
    // remove whitespaces
    System.out.print("Test is - " + test);
    test = test.replaceAll("\\s", "");
    // test = test.replaceAll("[ \\t]", "");
    // test = test.replaceAll("\\s+", "");
    // test = test.replaceAll(" ", "");
    System.out.print(" - now test is - " + test);
    // match pattern - numbers with decimal delimiter as dot or comma
    String decimalPattern = "([0-9]*)(\\.|\\,)([0-9]*)";
    boolean match = Pattern.matches(decimalPattern, test);
    System.out.println(" - Is this number? ===> " + match);
    return match;
}

そして今、私は気が狂っています。これが私の方法の出力の一部です:

[stdout] Test is - aasdfg - now test is - aasdfg - Is this number? ===> false
[stdout] Test is - aa sd fg - now test is - aasdfg - Is this number? ===> false
[stdout] Test is - 123.50 - now test is - 123.50 - Is this number? ===> true
[stdout] Test is - 123,50 - now test is - 123,50 - Is this number? ===> true
[stdout] Test is - 1 123.50 - now test is - 1 123.50 - Is this number? ===> false

出力の最後の行は奇妙なものです!

アドバイス - テスト値の由来HSSFCell#getStringCellValue()- おそらくここに問題があります。コメントされString#replaceAllた作品はありません。

4

8 に答える 8

3

1 123 と入力すると、コードが機能します

String に含まれる文字調べてみませんか?

    for (char c : test.toCharArray())
    {
        System.out.println(0+c);
    }
于 2013-06-27T09:49:11.887 に答える
1

千の前の空白は「奇妙な」空白であるため、これを試してください:

test = test.replaceAll("(\\d+)[^\\d.,]+(\\d+)|\\s+", "$1$2");

数字、ドット、コンマ以外の 2 つの数字の間の任意の文字に一致します

于 2013-06-27T10:18:11.150 に答える
0

あなたの変数 test は他のスレッドからアクセスされていると思います。

同期キーワードを使用

synchronized(test)
{
     //your complete code
}
于 2013-06-27T09:26:15.903 に答える
0

1000 の前に正確に何があるかわからないとしましょう。\n、\t、' ' などの可能性があります。したがって、空白のみを削除する代わりに、単純な「for ループ」を使用して数字とドットのみを渡し、他のすべてを無視するようにしてください。

StringBuilder sb;
for (int i = 0; i < test.length;  ++i)
     if ((test.charAt(i) >= '0'  &&  test.charAt(i) <= '9')  ||  test.charAt(i) == '.')
        sb.append(test.charAt(i));
于 2013-06-27T09:27:26.217 に答える
0

文字列を double に解析できるかどうかを確認するそのようなアプローチはどうですか?

static boolean canBeParsed(String str)
{
    try
    {
        Double.parseDouble(str.trim().replaceAll("\\s",""));
    }
    catch (Exception ignored)
    {
        return false;
    }
    return true;
}

編集: 文字列内からも空白を削除する場合は、.replaceAll("\s","") を使用します

于 2013-06-27T09:17:00.897 に答える