2014-01-07 72 views
1

我正在尝试使用while循环检查代码块是否已完成。当字符串中不再有'+',' - ','*','/','('或')'时,它将达到此状态。我发布的代码是我的尝试,虽然它不起作用。检查一个字符串是否包含给定字符

while (string.contains("+-*/()") == false) 
{ 
modifier code 
} 
+0

你确切的问题是什么?你能否在*修改代码*部分显示代码? –

+4

'contains()'将搜索该短语的实例,而不是任何地方的所有这些字符的实例。因此,除非字符串字面上包含“+ - * /()”,否则它将始终返回false。 – berry120

+1

如果你没有做任何处理,为什么不使用'String#replaceAll(String,String)'? –

回答

0

你可以使用String#matches()和正则表达式,如:

while (!string.matches(".*[-+/()*]+.*")) 
{ 
// modifier code 
} 

编辑以正则表达式现在

+0

这个正则表达式是错误的;你忘了在字符类中逃避'-'。 – Doorknob

+0

@ DoorknobofSnow我已经纠正了现在的订单,所以不需要转义它 –

1

有关解决方案略少回溯和转义:

String quoted = Pattern.quote("+-*/()"); 
Pattern pattern = Pattern.compile("[" + quoted + "]"); 
while (pattern.matcher(string).find()) { 
    // modifier code 
} 

更好的办法是避免使用Matcher一个循环,并使用修改器代码中的Matcher.appendReplacement()Matcher.appendTail()以一次性的方式在StringBuffer中创建结果。但这取决于修饰符代码的作用。 (而且我还是要继续关注你如何使用这些方法。)

相关问题