Java:查找字符串中的整数(计算器)
如果我有一个如下所示的Java:查找字符串中的整数(计算器),java,Java,如果我有一个如下所示的字符串:String calc=“5+3”。我可以将整数5和3作为子串吗 在本例中,您确实知道字符串的外观,但它可能是这样的:String calc=“55-23”因此,我想知道是否有方法识别字符串中的整数。您可以读取每个字符并找到它的Ascii码。如果代码介于48和57之间,则对其进行求值,如果它是一个数字,如果它不是,则它是一个符号。 如果您发现另一个字符也是数字,则必须将其添加到上一个数字中,直到找到一个符号为止 String calc="55-23";
字符串:String calc=“5+3”
。我可以将整数5
和3
作为子串吗
在本例中,您确实知道字符串的外观,但它可能是这样的:String calc=“55-23”
因此,我想知道是否有方法识别字符串中的整数。您可以读取每个字符并找到它的Ascii码。如果代码介于48和57之间,则对其进行求值,如果它是一个数字,如果它不是,则它是一个符号。
如果您发现另一个字符也是数字,则必须将其添加到上一个数字中,直到找到一个符号为止
String calc="55-23";
String intString="";
char tempChar;
for (int i=0;i<calc.length();i++){
tempChar=calc.charAt(i);
int ascii=(int) tempChar;
if (ascii>47 && ascii <58){
intString=intString+tempChar;
}
else {
System.out.println(intString);
intString="";
}
}
String calc=“55-23”;
字符串intString=“”;
char tempChar;
对于(int i=0;i47&&ascii,您可以读取每个字符并找到它的ascii代码。如果它在48到57之间,则评估它的代码,如果它是一个数字,如果它不是,则它是一个符号。
如果您发现另一个字符也是数字,则必须将其添加到上一个数字中,直到找到一个符号为止
String calc="55-23";
String intString="";
char tempChar;
for (int i=0;i<calc.length();i++){
tempChar=calc.charAt(i);
int ascii=(int) tempChar;
if (ascii>47 && ascii <58){
intString=intString+tempChar;
}
else {
System.out.println(intString);
intString="";
}
}
String calc=“55-23”;
字符串intString=“”;
char tempChar;
对于(int i=0;i47&&ascii对于类似的内容,正则表达式是您的朋友:
String text = "String calc = 55-23";
Matcher m = Pattern.compile("\\d+").matcher(text);
while (m.find())
System.out.println(m.group());
输出
现在,您可能需要扩展它以支持小数:
String text = "String calc = 1.1 + 22 * 333 / (4444 - 55555)";
Matcher m = Pattern.compile("\\d+(?:.\\d+)?").matcher(text);
while (m.find())
System.out.println(m.group());
输出
对于类似的内容,正则表达式是您的朋友:
String text = "String calc = 55-23";
Matcher m = Pattern.compile("\\d+").matcher(text);
while (m.find())
System.out.println(m.group());
输出
现在,您可能需要扩展它以支持小数:
String text = "String calc = 1.1 + 22 * 333 / (4444 - 55555)";
Matcher m = Pattern.compile("\\d+(?:.\\d+)?").matcher(text);
while (m.find())
System.out.println(m.group());
输出
您可以使用类似于([\d]+)([+-])([\d]+)
的正则表达式来获取完整的二进制表达式
Pattern pattern = Pattern.compile("([\\d]+)([+-])([\\d]+)");
String calc = "5+3";
Matcher matcher = pattern.matcher(calc);
if (matcher.matches()) {
int lhs = Integer.parseInt(matcher.group(1));
int rhs = Integer.parseInt(matcher.group(3));
char operator = matcher.group(2).charAt(0);
System.out.print(lhs + " " + operator + " " + rhs + " = ");
switch (operator) {
case '+': {
System.out.println(lhs + rhs);
}
case '-': {
System.out.println(lhs - rhs);
}
}
}
输出:
5 + 3 = 8
您可以使用类似于([\d]+)([+-])([\d]+)
的正则表达式来获取完整的二进制表达式
Pattern pattern = Pattern.compile("([\\d]+)([+-])([\\d]+)");
String calc = "5+3";
Matcher matcher = pattern.matcher(calc);
if (matcher.matches()) {
int lhs = Integer.parseInt(matcher.group(1));
int rhs = Integer.parseInt(matcher.group(3));
char operator = matcher.group(2).charAt(0);
System.out.print(lhs + " " + operator + " " + rhs + " = ");
switch (operator) {
case '+': {
System.out.println(lhs + rhs);
}
case '-': {
System.out.println(lhs - rhs);
}
}
}
输出:
5 + 3 = 8
使用split()函数。使用regex:识别字符串中的整数-regex-“\\d+”。另外,我感兴趣的是,尽管Playdowin指定了“整数”,到目前为止发布的答案只处理非负整数,因此在技术上都是不正确的。@Andreas这有什么区别?OP问如何识别字符串中的整数。有些整数是负的。我们是否可以假设没有人真正关心和接受OP接受答案的事实,并停止或接受它一个私有的trolling会话?使用split()函数。使用regex:来识别字符串-regex-“\\d+”中的整数。另外,我感兴趣的是,尽管Playdowin指定了“整数”,到目前为止发布的答案只处理非负整数,因此在技术上都是不正确的。@Andreas这有什么区别?OP问如何识别字符串中的整数。有些整数是负的。我们是否可以假设没有人真正关心和接受OP接受答案的事实,并停止或接受它私人聊天?有更简单的方法可以通过定期聊天进行Expressions@YassinHajaj,我愿意猜测OP是否知道regex是什么,他们就不需要问这个问题了。@ChiefTwoPencils问题的关键是让OP在学习新概念的同时给出最准确的答案…@ChiefTwoPencils是的,是的。但是s不是“正确的方向”。@DavidWallace,这只是你的意见。是否可以通过ascii值确定字符是否为数字?如果是,则不是“错误的”方向。“正确的方向”任何方向都可以得到正确的答案。事实上,回复的评论是错误的,并且通过帮助参考证明了这一点。有更简单的方法可以使用常规的Expressions@YassinHajaj,我愿意猜测,如果OP知道什么是正则表达式,他们就不需要问这个问题了。@ChiefTwoPencils重点是g在让OP同时学习新概念的同时,我有一个最准确的答案…@ChiefTwoPencils是的,它有。但这不是“正确的方向”。@DavidWallace,这只是你的意见。是否有可能通过ascii值来确定字符是否是数字?如果是,那么它不是“错误的”方向。“正确的方向”是任何可以导致正确答案的方向。事实仍然是,回应的评论是错误的,并且通过帮助参考证明是错误的。