当前位置: 首页 > 知识库问答 >
问题:

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

闻慎之
2023-03-14

因此,我为用户输入创建了一个reg ex模式和匹配器,并使用串联来产生将用于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个答案

佘茂才
2023-03-14

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

通常最好是尽量简化来理解和修复这类问题!

詹弘毅
2023-03-14

Java在字符串文本中有转义序列。若字符串包含\,则意味着下一个字符将以特殊方式进行解释。

要将\添加到字符串中,需要将其转义为“\\”

以下是一些示例代码:

String s = "\\";

System.out.println(s); // print single slash
 类似资料:
  • 问题内容: 为什么当我使用以下操作对字符求和时,它返回数字而不是字符?它不应该给出相同的结果吗? 下面的代码复制了字符: doubleChar(“ The”)→“ TThhee” 问题答案: 以下表达式的结果 是String连接的结果。Java语言规范说明 字符串串联的结果是对String对象的引用,该对象是两个操作数字符串的串联。在新创建的字符串中,左侧操作数的字符位于右侧操作数的字符之前。 的

  • 在我的应用程序中,一切正常,但我想提高性能并优化我的代码。 这两个哪个更适合 1.initialisation 2.连接

  • 问题内容: 我是Java的新手,正在尝试学习Maps的概念。 我想出了下面的代码。但是,我想同时打印“键字符串”和“值字符串”。 我只能找到只打印“键字符串”的方法。 问题答案: 有多种方法可以实现此目的。这是三个。 输出量

  • 问题内容: 我看到许多人使用这样的格式字符串: 而不是像这样简单地串联字符串: 格式字符串是否具有更好的性能,还是仅用于外观? 问题答案: 这只是为了外观。您可以一眼看出格式是什么。我们中的许多人都比微优化更喜欢可读性。 让我们看看IPython的意思:

  • 问题内容: 我正在从事Java代码优化。我不清楚或符号之间的区别: 第2行和第3行有什么区别? 问题答案: 这种方法使用StringBuilder创建结果字符串 此方法仅调用的静态方法来获取int的String版本 依次调用

  • 问题内容: 在其他语言(如Java)中,通过字符串文字与初始化程序获得的字符串之间实际上存在区别。在Swift中,它们等同吗? 例如 问题答案: 根据苹果文档,这些声明是等效的: 初始化一个空字符串 要创建一个空的String值作为构建更长的字符串的起点,请为一个变量分配一个空的字符串文字,或者使用初始化语法初始化一个新的String实例: 参考:https : //developer.apple