我正在尝试确定数字是否是这样的表达式中的整数。 (10 * 2)+ 5.如果表达式为(10 * 2)+ 5.24,我希望程序说该表达式中存在非整数。目前的代码:
public static boolean isInt(String expr) {
for (int i = 0; i<expr.length(); i++){
if (expr. charAt(i) != (int)i){
return false;
}
}
return true;
}
问题在于除了数字之外还有更多的字符。所以我希望它只检查数字并忽略所有其他符号,以确定字符串中的每个数字是否为整数。
答案 0 :(得分:0)
我首先将标记化为“单词”,分割为* / + - ()^和空格。如果我明白你在做什么,结果应该只是数字。
使用Guava分割: Iterable tokens = Splitter.on(CharMatcher.anyOf(“ - / * +()^”))。split(myExpression);
然后你可以按照@Scary Wombat的建议扫描寻找小数点的“单词”
以下是完整版本:
public void test() {
char[] values = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
List<Character> ints = Chars.asList(values);
String str = "the values are 4 and 4.03 tons";
Iterable<String> tokens = Splitter.on(CharMatcher.anyOf("- /*+()^")).split(str);
for (String token : tokens) {
char[] chars = token.toCharArray();
for (char c : chars) {
if (!ints.contains(c)) {
System.out.println(token + " is not an int");
break;
}
}
}
}
产:
the is not an int
values is not an int
are is not an int
and is not an int
4.03 is not an int
tons is not an int
答案 1 :(得分:0)
看看这是否能满足您的需求
String str = "the values are 4 and 4.03 tons";
Pattern p = Pattern.compile("\\d+[.]?\\d*");
Matcher m = p.matcher(str);
while (m.find()) {
String ss = m.group();
int temp_i;
try {
temp_i = Integer.parseInt(ss);
System.out.println(temp_i);
} catch (NumberFormatException nfe) {
System.out.println(String.format("%s not integer", ss));
}//end try
}//end while
或者,为了迎合3e-2等浮动,请使用
Pattern p = Pattern.compile("\\d+[.eE]?[-]?\\d*");
希望它有所帮助。
答案 2 :(得分:0)
我们可以用reg表达来实现它。
String regExp = "([0-9]*\\.[0-9]*)";
然后根据找到的每个等式计算匹配数:
所以, 完整的代码在这里:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegExpDemo {
public static void main(String[] args) {
String regExp = "([0-9]*\\.[0-9]*)";
String input = "-1 + 5 - (10 * 2) + 5.24 / (3.146 * 22 / 100)";
try {
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
System.out.println("Result "+matcher.group());
count++;
//System.out.println("Count "+matcher.groupCount());
}
System.out.println("Total Count "+count);
} catch(Exception exp) {
System.out.println(exp);
}
}
}
O/p
--------------
Result 5.24
Result 3.146
Total Count 2
我希望输入只包含有效的数字格式,并且不使用任何其他字符。即; 1,26而不是1.26。如果有任何其他字符,您可能需要根据
修改模式此外,如果你需要计算像1..26这样的值,那么使用quantier + with。(dot)
String regExp = "([0-9]*\\.+[0-9]*)";
String input = "-1 + 5 - (10 * 2) + 5.24 / (3.146 * 22 / 100) - 1..26";