如何从字符串中获取数字?

我正在使用Java StreamTokenizer来提取字符串的各种单词和数字,但是遇到了一个问题,其中包含逗号的数字,例如10,567被读作10.0和567。

我还需要从可能出现的数字中删除所有非数字字符,例如$ 678.00应为678.00或-87应为87。

我相信这些可以通过whiteSpace和wordChars方法实现,但有没有人知道如何做到这一点?

目前基本的streamTokenizer代码是:

BufferedReader br = new BufferedReader(new StringReader(text)); StreamTokenizer st = new StreamTokenizer(br); st.parseNumbers(); st.wordChars(44, 46); // ASCII comma, - , dot. st.wordChars(48, 57); // ASCII 0 - 9. st.wordChars(65, 90); // ASCII upper case A - Z. st.wordChars(97, 122); // ASCII lower case a - z. while (st.nextToken() != StreamTokenizer.TT_EOF) { if (st.ttype == StreamTokenizer.TT_WORD) { System.out.println("String: " + st.sval); } else if (st.ttype == StreamTokenizer.TT_NUMBER) { System.out.println("Number: " + st.nval); } } br.close(); 

或者有人建议REGEXP来实现这一目标? 我不确定REGEXP在这里是否有用,因为在从字符串中读取标记之后会发生任何parding。

谢谢

摩根先生。

StreamTokenizer已经过时,最好使用Scanner ,这是您的问题的示例代码:

  String s = "$23.24 word -123"; Scanner fi = new Scanner(s); //anything other than alphanumberic characters, //comma, dot or negative sign is skipped fi.useDelimiter("[^\\p{Alnum},\\.-]"); while (true) { if (fi.hasNextInt()) System.out.println("Int: " + fi.nextInt()); else if (fi.hasNextDouble()) System.out.println("Double: " + fi.nextDouble()); else if (fi.hasNext()) System.out.println("word: " + fi.next()); else break; } 

如果要将逗号用作浮点分隔符,请使用fi.useLocale(Locale.FRANCE);

尝试这个:

 String sanitizedText = text.replaceAll("[^\\w\\s\\.]", ""); 

SanitizedText只包含字母数字和空格; 在那之后将它标记为应该是轻而易举的。

编辑

编辑也保留小数点(在括号的末尾)。 . 对regexp来说是“特殊的”所以它需要一个反斜杠逃脱。

这对我有用:

 String onlyNumericText = text.replaceAll("\\\D", ""); 
  String str = "1,222"; StringBuffer sb = new StringBuffer(); for(int i=0; i 

当然可以使用regexp来完成:

 s/[^\d\.]//g 

但请注意,它会占用所有逗号,如果使用美国数字格式,逗号只能分离成千上万,这可能就是您想要的。 在某些语言中,使用逗号代替点作为小数分隔符。 因此在解析国际数据时要小心。

我留给你把它翻译成Java。

从字符串中获取数字的代码。例如,我有字符串“123”,然后我想编号123。

  int getNumber(String str){ int i=0; int num=0; int zeroAscii = (int)'0'; while (i 

来源: 如何从字符串中获取数字