0

我有result,它是文本或数值,例如:

String result;
result = "avsds";
result = "123";
result = "345.45";

有时结果还包含逗号,例如:

result = "abc,def";
result = "1,234";

result我只想在它是数值时删除逗号,而不是在它是简单文本时。

解决这个问题的最佳方法是什么?

4

3 回答 3

2

这是你的答案:

    String regex = "(?<=[\\d])(,)(?=[\\d])";
    Pattern p = Pattern.compile(regex);
    String str = "Your input";
    Matcher m = p.matcher(str);
    str = m.replaceAll("");
    System.out.println(str);

正如您所要求的,这只会影响数字,而不是字符串。

尝试在您的主要方法中添加它。或者试试这个,它接收输入:

       String regex = "(?<=[\\d])(,)(?=[\\d])";
        Pattern p = Pattern.compile(regex);
        System.out.println("Value?: ");
            Scanner scanIn = new Scanner(System.in);
            String str = scanIn.next();
        Matcher m = p.matcher(str);
        str = m.replaceAll("");
        System.out.println(str);
于 2013-02-12T22:55:12.507 回答
1

最简单的方法是使用两个正则表达式。第一个确保它是数字的(类似于[0-9.,]*),第二个是清理它(result.replaceAll("/,//")

于 2013-02-12T22:53:47.110 回答
0

在删除不需要的字符后,您可以尝试首先使用任何数字类(Integer、Double 等)解析字符串,如果解析成功,则它是一个数字,您可以从原始字符串中删除不需要的字符。

在这里,我使用了 BigInteger,因为我不确定您要求的精度。

  public static String removeIfNumeric(final String s, final String toRemove) {
     final String result;
     if (isNumeric(s, toRemove)) {
         result = s.replaceAll(toRemove, "");
     } else {
         result = s;
     }
     return result;
  } 

  public static boolean isNumeric(final String s, final String toRemoveRegex) {
      try {
          new BigInteger(s.replaceAll(toRemoveRegex, ""));
          return true;
      } catch (NumberFormatException e) {
          return false;
      }
  }
于 2013-02-13T01:22:43.817 回答