Java:识别字符串中的Ints和非Ints
你好,我正试图修复我的代码中的一个错误。当读取传入的短语时,此代码似乎不计算整数。它计算非整数字的数量没有问题。 例如,如果我有以下句子: “我爱我的4只猫” 它应该显示我有4个非整数字和1个整数。但整数并非如此,它似乎将其识别为一个词 任何想法?Java:识别字符串中的Ints和非Ints
String[] stra = phrase.split(" ");
int numInts = 0;
int numNonInts = 0;
for (String s : stra) {
try {
Integer.parseInt(s);
}
catch(NumberFormatException nfe) {
numNonInts++;
continue;
}
numInts++;
}
尝试使用:的
Integer.valueOf(s);
代替
Integer.parseInt(s);
为什么这会有帮助?这将如何解决这个问题? – templatetypedef 2012-07-06 20:56:41
看不到这会有什么帮助,因为Integer.valueOf()只是在内部调用Integer.parseInt()。如果我没有弄错唯一的区别是返回类型(int vs Integer) – Andrew 2012-07-06 20:57:59
String[] stra = phrase.split("\\W+"); // + for sequences
int numInts = 0;
int numNonInts = 0;
for (String s : stra) {
try {
Integer.parseInt(s);
numInts++;
}
catch (NumberFormatException nfe) {
numNonInts++;
}
}
两个空格会算作一个字。 另外\\W
包括所有非字词字符。
你能解释为什么这比OP的原始代码更好吗? – templatetypedef 2012-07-06 20:57:17
@JB Nizet - OP的代码在每次迭代时不会增加numInts; '继续'将跳回到顶部,而不是在'catch'之后继续。这很复杂,但它有效(我已经在我的系统上验证过) – templatetypedef 2012-07-06 20:59:58
是的,对不起。我错过了继续。我讨厌继续。 – 2012-07-06 21:00:28
为了避免意外的分隔符(如制表符,空格两倍或换行符),代替你的分裂:
phrase.split("\\s+");
也许你得到了超过Integer
数量上限。
更换您的循环:
for (String s : stra) {
if(s.matches("\\d+"))
numInts++;
else
numNonInts++;
}
此代码的工作在我的系统就好了;它标记为四个单词和一个非单词。你确定这个代码是问题吗? – templatetypedef 2012-07-06 20:54:13