如何从字符串中获取数字?
我使用Java StreamTokenizer极提取字符串的各种文字和数字,但已运行到哪里,其中包括逗号的数字来说有问题,例如10,567被读为10.0和567。如何从字符串中获取数字?
我还需要从数量,他们可能发生,例如删除所有非数字字符$ 678.00应该是678.00或-87应该是87
我相信这些可以通过空白和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);
回答:
当然这可以用正则表达式来完成:
s/[^\d\.]//g
不过,请注意它吃所有的逗号,这可能是你想要什么,如果使用美国数字格式,其中逗号只千分位。在某些语言中,逗号用作小数点分隔符而不是点。所以在分析国际数据时要小心。
我让你来此转换为Java。
回答:
试试这个:
String sanitizedText = text.replaceAll("[^\\w\\s\\.]", "");
SanitizedText将只包含字母,数字和空格;在此之后进行标记应该是一件轻而易举的事情。
EDIT
被修改以保留小数点以及(在支架的端部)。 .
对于正则表达式是“特殊的”,所以它需要反斜杠转义。
回答:
String str = "1,222"; StringBuffer sb = new StringBuffer();
for(int i=0; i<str.length(); i++)
{
if(Character.isDigit(str.charAt(i)))
sb.append(str.charAt(i));
}
return sb.toString()
回答:
这工作对我来说:
String onlyNumericText = text.replaceAll("\\\D", "");
回答:
Code for get从string.For例如数字我有字符串“123”的话,我想号123
int getNumber(String str){ int i=0;
int num=0;
int zeroAscii = (int)'0';
while (i<str.length()) {
int charAscii=(int)str.charAt(i);
num=num*10+(charAscii-zeroAscii);
i++;
}
return num;
}
来源:How to get number from string
以上是 如何从字符串中获取数字? 的全部内容, 来源链接: utcz.com/qa/266380.html