Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查字符串上的某些单词?_Java_String_Case Insensitive - Fatal编程技术网

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")

我有一个简单的代码,用于检查字符串查询。但是它只检查小写,我怎么做才能让它也验证任何大写而不反复写呢?

Java字符串没有
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"));