初始化的字符串与串联的字符串不同,但打印时的结果相同

时间:2019-05-10 08:59:42

标签: java regex string concatenation

因此,我正在为用户输入制作正则表达式模式和匹配器,并使用串联生成将用于Pattern.compile()的字符串。 我无法匹配模式,但是当我打印连接的结果并将其放在Pattern.compile中时,它与模式匹配。我尝试了不同的连接方式,但仍然不匹配。

    for(int i = 0; i < 3; i++){
        Matcher elementMatcher = element.matcher(inputArr[i]);
        if(elementMatcher.matches())    inputPattern += elemString;
        else if(inputArr[i].equals("+") || inputArr[i].equals("*") || inputArr[i].equals(".") || inputArr[i].equals("(")|| inputArr[i].equals(")") || inputArr[i].equals("-") || inputArr[i].equals("/")){
            inputPattern += "\\\\";
            inputPattern += inputArr[i];
        }   
        else inputPattern += inputArr[i];
        inputPattern += "\\\\s*";           
    }

    if(inputPattern.equals("[a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*"))    
    System.out.println(inputPattern); //prints [a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*
    pattern1 = Pattern.compile(inputPattern);
    matcher1 = pattern1.matcher(value[j]);
    if(matcher1.matches())  {
            result = value[j];
        System.out.println("YO");

    }

奇怪的是,它在

时有效
pattern1 = Pattern.compile("[a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*");

但打印inputPattern会产生[a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*

pattern1 = Pattern.compile(inputPattern); 

产生不同的结果

2 个答案:

答案 0 :(得分:0)

Java在字符串文字中具有转义序列。如果字符串包含\,则表示下一个字符将以特殊方式解释。

要将\添加到字符串中,您需要对其进行转义"\\"

以下是一些示例代码:

String s = "\\";

System.out.println(s); // print single slash

答案 1 :(得分:0)

我认为您的问题是如何在模式字符串中获取适当数量的\字符。要将单个\字符转换为文字字符串,您需要输入两个:“ \\”将为您提供一个带有单个\字符的字符串。该字符串将打印为\。因此,如果您有一个打印为\\的字符串,则可能是在文字字符串中使用四个\创建的,因为“ \\\\”将打印为\\。

通常,最好尽量简化以了解和解决此类问题!