0

我想检查字符串是否包含操作数

    char m='\0';
    char match[]={'(',')','=',';','{','}','[',']','+','- 
            ','*','/','&','!','%','^','|','<','>'};                                                                            
    for(int i =0; i<code.length(); i++)
    {
        m=code.charAt(i);
        for(int j=0;j<match.length;j++){
            if(m==match[j]){
                o++;
                            }
                     }
           }

上面的代码可以得到字符串中操作数使用的总数,但是有一些简单的方法。

4

4 回答 4

2

您可以使用正则表达式字符类来查找任何字符列表,例如:

// (See note below about these -++--++
//                              ||  ||
//                              vv  vv
if (stringToTest.match("[()=;{}[\\]+\\-*/&!%^|<>']")) {
    // It has at least one of them
}

和表示字符类[]在其中,您必须使用反斜杠进行转义](因为否则它看起来像字符类的结尾),并且由于反斜杠在字符串文字中是特殊的,因此您需要两个。同样,您也必须-在字符类中转义(除非它是第一个字符,但记住这样做更容易)。我已经突出显示了上面带有刻度线的那些。

文件:

于 2013-10-25T14:44:23.847 回答
2

您可以使用正则表达式用一行代码做同样的事情。

if(code.matches("[,/!%<>]"))  sysout("There is Operator"); 

将您需要的所有运算符放在括号中。

我现在无法测试上面的代码,但您可能必须使用反斜杠来转义某些运算符。

于 2013-10-25T14:45:57.300 回答
1

如果将“匹配”存储为哈希表,则查找效率会更高:

HashSet<Character> match = new HashSet<Character>(Arrays.asList('(',')','=',';','{','}','[',']','+','-','*','/','&','!','%','^','|','<','>');

for(int i =0; i < code.length(); i++) {

    if (match.contains(code.charAt(i)) {
        o++;
    }
}
于 2013-10-25T14:51:08.520 回答
1

尝试使用这些功能

String.contains() - 检查字符串是否包含指定的字符值序列 String.indexOf() - 返回字符串中第一次出现指定字符或子字符串的索引(此方法有 4 种变体)

而不是检查数组中的每个字符。

于 2013-10-25T14:45:17.027 回答