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

我使用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

回到顶部