如何使用正则表达式删除数千之前的空格? - 不寻常

时间:2013-06-27 09:09:53

标签: java regex

为什么我无法在数千人之前摆脱空白?

我已经编写了这样的方法来检查字符串是否可以解析为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无效。

8 个答案:

答案 0 :(得分:3)

如果我输入1 123

,您的代码对我有用

为什么不在String中找出的字符?

    for (char c : test.toCharArray())
    {
        System.out.println(0+c);
    }

答案 1 :(得分:1)

由于千人之前的空白是“奇怪的”空格,试试这个:

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

Matches any character - that are not a digit, a dot or a comma - between two digits

答案 2 :(得分:0)

删除空格的常用方法是:

test = test.replaceAll("\\s", "");

逗号不是可解析的double的有效字符。实际上,由于double可以表示的最大和最小可能值,并非所有数字组合都是可解析的。

确定字符串是否可以解析为double的最简单和最好的方法是使用JDK尝试解析:

public static boolean isNumber(String test) {{
    try {
        Double.parseDouble(test.trim());
        return true;
    } catch (NumberFormatException ignore) {
        return false;
    }
}

答案 3 :(得分:0)

String s = stemp.replaceAll("\\s","");

答案 4 :(得分:0)

正如所有人所说的尝试使用\\s,这是我检查的简单方法:

public static boolean isStringisDoubleOrNot(String myvalue) {
    try {
        Double.parseDouble(myvalue);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

答案 5 :(得分:0)

如何检查字符串是否可以解析为双倍?

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

编辑:如果你想从字符串中删除空格,请使用.replaceAll(“\ s”,“”)

答案 6 :(得分:0)

我猜你的变量测试正在被其他线程访问。

使用synchronized关键字

synchronized(test)
{
     //your complete code
}

答案 7 :(得分:0)

让我们说我们不知道千万之前到底是什么。它可能是\ n,\ t,''或dunno是什么。因此,不要仅删除空格,而是尝试仅传递数字和点,使用sinple“for loop”并忽略其他所有内容。

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));