Java 如何检查字符串上的某些单词?
我有一个简单的代码,用于检查字符串查询。但是它只检查小写,我怎么做才能让它也验证任何大写而不反复写呢?Java字符串没有Java 如何检查字符串上的某些单词?,java,string,case-insensitive,Java,String,Case Insensitive,我有一个简单的代码,用于检查字符串查询。但是它只检查小写,我怎么做才能让它也验证任何大写而不反复写呢?Java字符串没有containsIgnoreCase方法,很遗憾。解决此问题的一种方法是将输入转换为小写(或大写,由您选择),并检查您正在搜索的小写单词: if (c.getQuery().contains("update") || c.getQuery().contains("delete") || c.getQuery().contains("truncate")
containsIgnoreCase
方法,很遗憾。解决此问题的一种方法是将输入转换为小写(或大写,由您选择),并检查您正在搜索的小写单词:
if (c.getQuery().contains("update") || c.getQuery().contains("delete") || c.getQuery().contains("truncate")
|| c.getQuery().contains("drop")) {
throw new MensagemException(Mensagens.getMensagem("Only select is allowed"));
我会做一些增强:
String toSearch = c.getQuery().toLowerCase();
if (toSearch.contains("update") ||
toSearch.contains("delete") ||
toSearch.contains("truncate") ||
toSearch.contains("drop")) {
throw new MensagemException
(Mensagens.getMensagem("Only select is allowed"));
}
您也可以尝试这样做:
如果(!cQueryLower.contains(“select”))
您可以使用toLowerCase()
,这样您就可以用小写检查大写和小写的所有变体
final String cQuery = c.getQuery(); // retrieve only once
// check null, convert query to lower case so case won't matter anymore
final String cQueryLower = cQuery == null ? null : cQuery.toLowerCase();
if (cQueryLower.contains("update") || cQueryLower.contains("delete") || cQueryLower.contains("truncate") || cQueryLower.contains("drop")) {
throw new MensagemException(Mensagens.getMensagem("Only select is allowed"));
}
我的意思是它一定是这样工作的。我还没有测试它您可以将字符串转换为小写,然后保持您正在做的相同操作,应该如下所示:
if (c.getQuery().toLowerCase().contains("update") || c.getQuery().toLowerCase().contains("delete") || c.getQuery().toLowerCase().contains("truncate")
|| c.getQuery().toLowerCase().contains("drop")) {
throw new MensagemException(Mensagens.getMensagem("Only select is allowed"));
使用
compareToIgnoreCase
@Dimitri这将不起作用,因为OP的目的不是比较整个字符串。这个问题重复,并且只需注意:如果您的查询可能是这样的:select date\u updated from tableA
您将得到一个假阳性结果……您是否考虑过在您的数据库中处理用户授权DB而不是这个?我相信这个答案是错误的。这个问题无疑是一个XY问题的例子;您不会通过在其他SQL关键字上使用“contains”来检查SQL查询是否为select查询。一旦表中的任何字段包含其中一个字符串(例如,从mytable中选择updated_on),该答案将立即中断;您最多可以使用startsWith并假设只执行一个查询,但尝试解决“如何检测非选择SQL查询”肯定是实际问题,而不是他们提出的问题。
String queryToLowerCase = c.getQuery().toLowerCase();
if (queryToLowerCase .contains("update") || queryToLowerCase .contains("delete")
|| queryToLowerCase .contains("truncate") || queryToLowerCase .contains("drop")) {
throw new MensagemException(Mensagens.getMensagem("Only select is allowed"));