字符串中的引号符号(java)

字符串中的引号符号(java),java,string,quote,Java,String,Quote,我用Java编写了一个括号检查器,在文本中搜索单引号时遇到了问题。 如果我有如下字符串(!在本例中,我感兴趣的是文本,而不是代码): 在调试器中,我看到在第一个等号之后,我在字符串中得到以下字符: 0 = ' 1 = \\\ 2 = ' 3 = ' 我怎样才能把1和2结合起来,这样他就不会再把第二个“as”读了?我以为这是用反斜杠完成的,但显然我做错了什么 如果代码有任何帮助:这就是我处理单引号和双引号的方式: Stack <Character> theStack = ne

我用Java编写了一个括号检查器,在文本中搜索单引号时遇到了问题。 如果我有如下字符串(!在本例中,我感兴趣的是文本,而不是代码):

在调试器中,我看到在第一个等号之后,我在字符串中得到以下字符:

0 = '

1 = \\\

2 = ' 

3 = '
我怎样才能把1和2结合起来,这样他就不会再把第二个“as”读了?我以为这是用反斜杠完成的,但显然我做错了什么

如果代码有任何帮助:这就是我处理单引号和双引号的方式:

Stack <Character> theStack = new Stack<Character>();
// loop through file line per line
String line;

else if (line.charAt(i)=='\'' ||line.charAt(i)=='\"'){
   // check whether there is already one of them on top
   if (line.charAt(i)== '\'' && theStack.peek()=='\''){
       theStack.pop();
    }

    else if (line.charAt(i)== '\"' && theStack.peek()=='\"'){
       theStack.pop();
    }
    // else push new one on top
    else {
        theStack.push(line.charAt(i));
    }
}
Stack theStack=newstack();
//每行循环文件行
弦线;
else如果(line.charAt(i)='\''| line.charAt(i)='\''){
//检查顶部是否已经有一个
if(line.charAt(i)='\''&&theStack.peek()='\''){
theStack.pop();
}
else if(line.charAt(i)='\''和&theStack.peek()='\''){
theStack.pop();
}
//否则就把新的推到上面
否则{
钉压(线特征(i));
}
}

它失败了,因为在上面显示的行中它读取了三个单引号/双引号。它应该只读取其中的两个。我不明白如何避免扫描仪将上面显示的语句中的第二个单引号/双引号作为单引号来读取。我认为它是用反斜杠完成的。

只需修改
if
条件,如下所示>
else if ((line.charAt(i) == '\'' || line.charAt(i) == '\"')
                               && line.charAt(i-1) != '\\') {
这将忽略所有用反斜杠转义的引号,即不应被视为结束引号并弹出字符堆栈。您可以进一步简化
if-else
块,如下所示:

// check whether there is already one of them on top
if (line.charAt(i) == theStack.peek()) { // un-boxing to char
   theStack.pop();
}
// else push new one on top
else {
    theStack.push(line.charAt(i));
}

这是因为父级
else if
块已经确保行字符是
,因此我们可以继续并直接将其与字符堆栈的头部进行比较。

在不看到代码的情况下,我们如何知道您做错了什么?
// check whether there is already one of them on top
if (line.charAt(i) == theStack.peek()) { // un-boxing to char
   theStack.pop();
}
// else push new one on top
else {
    theStack.push(line.charAt(i));
}