Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:查找字符串中的整数(计算器)_Java - Fatal编程技术网

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值来确定字符是否是数字?如果是,那么它不是“错误的”方向。“正确的方向”是任何可以导致正确答案的方向。事实仍然是,回应的评论是错误的,并且通过帮助参考证明是错误的。