Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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/Regex)_Java_Regex_Equation - Fatal编程技术网

将字符串中的不平等符号拆分为标记?(Java/Regex)

将字符串中的不平等符号拆分为标记?(Java/Regex),java,regex,equation,Java,Regex,Equation,我试图在Java中将一个算术公式字符串拆分为标记。这些方程还包括不等式符号!=,=,>,我会用StringTokenizer。输出 [(,2.0,*,2.0,检查以下解决方案是否对您有所帮助 这里,我假设输入是一个算术方程(不是任何其他字符串),并且只包含整数,即2,而不是小数,即2.0 private static void method(String str){ Pattern pattern1 = Pattern.compile("[^\\d]+");

我试图在Java中将一个算术公式字符串拆分为标记。这些方程还包括不等式符号!=,=,>,我会用StringTokenizer。输出


[(,2.0,*,2.0,检查以下解决方案是否对您有所帮助

这里,我假设输入是一个算术方程(不是任何其他字符串),并且只包含整数,即2,而不是小数,即2.0

private static void method(String str){
    Pattern pattern1 = Pattern.compile("[^\\d]+");
    Pattern pattern2 = Pattern.compile("[\\d]+");
    Matcher matcher1 = pattern1.matcher(str);
    Matcher matcher2 = pattern2.matcher(str);
    List<String> list = new ArrayList<String>();
    while(matcher1.find()){
        list.add(matcher1.group(0));
        if(matcher2.find()){
            list.add(matcher2.group(0));
        }
    }
    System.out.println("Token list is::");
    for(String st:list){
        System.out.print(st+",");
    }
}
私有静态无效方法(字符串str){
Pattern pattern1=Pattern.compile(“[^\\d]+”);
Pattern pattern2=Pattern.compile(“[\\d]+”);
Matcher matcher1=pattern1.Matcher(str);
Matcher matcher2=pattern2.Matcher(str);
列表=新的ArrayList();
while(matcher1.find()){
list.add(matcher1.group(0));
if(matcher2.find()){
list.add(matcher2.group(0));
}
}
System.out.println(“令牌列表为:”);
for(字符串st:list){
系统输出打印(st+“,”);
}
}

如果我通过(2*2我想,你需要一个正则表达式来检查之后是否有no=。你可以这样做。你也可以只检查
使用应该使用正则表达式来查找\d(谢谢!我能解释一下代码中发生了什么吗?据我所知,第一个模式收集所有数字,而第二个模式收集所有其他数字,对吗?是的,模式1代表所有非数字字符,而模式2代表所有数字字符。使用循环,根据这些数字检查传递的字符串模式,当找到匹配项时,它将存储在列表中。因此,在循环结束时,列表包含等式的所有标记。@Dylan,如果您对我的解释感到满意,请单击左上角的勾号接受此答案。
    StreamTokenizer tokenizer = new StreamTokenizer(new StringReader("(2*2<=5)"));
    List<String> expression = new ArrayList<>();
    try {
        while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
            switch(tokenizer.ttype) {
                case StreamTokenizer.TT_NUMBER:
                    expression.add(String.valueOf(tokenizer.nval));
                    break;
                case StreamTokenizer.TT_WORD:
                    expression.add(tokenizer.sval);
                    break;
                default:  // operator
                    expression.add(String.valueOf((char) tokenizer.ttype));
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println( Arrays.toString(expression.toArray()));
private static void method(String str){
    Pattern pattern1 = Pattern.compile("[^\\d]+");
    Pattern pattern2 = Pattern.compile("[\\d]+");
    Matcher matcher1 = pattern1.matcher(str);
    Matcher matcher2 = pattern2.matcher(str);
    List<String> list = new ArrayList<String>();
    while(matcher1.find()){
        list.add(matcher1.group(0));
        if(matcher2.find()){
            list.add(matcher2.group(0));
        }
    }
    System.out.println("Token list is::");
    for(String st:list){
        System.out.print(st+",");
    }
}