Java StringBuilder.insert()

Java StringBuilder.insert(),java,stringbuilder,Java,Stringbuilder,我需要比较两个字符串 输入值如下 从ds中选择*其中ds.age='24' 需要与之进行比较的文本 选择*FROM ds,其中ds.status='VALID'和ds.age='24' 由于“ds.status='VALID'AND”是一个静态字符串,我考虑将其插入到输入中,然后与原始字符串进行比较 所以我创建了一个StringBuilder对象 query.insert(query.indexOf(“WHERE”),“ds.status='VALID'和“) 但产出是有限的 从ds.statu

我需要比较两个字符串

输入值如下

从ds中选择*其中ds.age='24'

需要与之进行比较的文本

选择*FROM ds,其中ds.status='VALID'和ds.age='24'

由于“ds.status='VALID'AND”是一个静态字符串,我考虑将其插入到输入中,然后与原始字符串进行比较

所以我创建了一个StringBuilder对象

query.insert(query.indexOf(“WHERE”),“ds.status='VALID'和“)

但产出是有限的

从ds.status='VALID'和其中ds.age='24'中选择*

此外,indexOf()不能以静态位置输入,因为它可能随输入而变化。 有没有办法找到单词“WHERE”最后一个字母的索引

我找到的工作是

String query=query.replace(“WHERE”、“WHERE ds.status='VALID'AND”)


这是最好的方法吗?

你可以这样做-

query.insert(query.indexOf("WHERE") + "WHERE".length(), " ds.status='VALID' AND");
    StringBuffer str = new StringBuffer("SELECT * FROM ds WHERE ds.age='24'");
    str.insert(str.lastIndexOf("WHERE") + 6, "ds.status='VALID' AND ");

你可以这样做-

    StringBuffer str = new StringBuffer("SELECT * FROM ds WHERE ds.age='24'");
    str.insert(str.lastIndexOf("WHERE") + 6, "ds.status='VALID' AND ");

我认为这个替代品更干净、更容易阅读——就像彼得·劳里的评论:

query.replace(" WHERE ", " WHERE ds.status='VALID' AND ");
不用担心篱笆柱的错误或神奇的数字,而且意图更加清晰

编辑

这将是:

query.toString().replace(" WHERE ", " WHERE ds.status='VALID' AND ");

(StringBuilder上的替换采用索引)

我认为替换更干净,更容易阅读-就像Peter Lawrey的评论:

query.replace(" WHERE ", " WHERE ds.status='VALID' AND ");
不用担心篱笆柱的错误或神奇的数字,而且意图更加清晰

编辑

这将是:

query.toString().replace(" WHERE ", " WHERE ds.status='VALID' AND ");

(StringBuilder上的替换获取索引)

为什么不直接添加字母数-->indexOf(“WHERE”)+6I将使用替换,但使用空格
query.Replace(“WHERE”、“WHERE ds.status='VALID'AND”)
为什么不直接添加字母数-->indexOf(“WHERE”)+6I将使用replace,但使用空格
query.replace(“WHERE”、“WHERE ds.status='VALID'AND”)不完全。将
query.indexOf(“WHERE”+“WHERE.length())
替换为
query.indexOf(“WHERE”)+“WHERE.length()
,甚至更好:
query.indexOf(“WHERE”)+5
添加一些空格,否则将导致
从ds WHEREds.status='VALID'和ds.age='24'中选择*;)@Hachi在字符串需要插入.q.insert(query.indexOf(“WHERE”)+5,“ds.status='VALID'AND”)之前设置一个空格;给出java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:22异常。由此我了解到,根据java,字符串长度不是22个字符。但是从ds中选择*其中ds.age='24';包含22个字符@学生,
q
是什么?我认为你应该使用
查询
。不完全是。将
query.indexOf(“WHERE”+“WHERE.length())
替换为
query.indexOf(“WHERE”)+“WHERE.length()
,甚至更好:
query.indexOf(“WHERE”)+5
添加一些空格,否则将导致
从ds WHEREds.status='VALID'和ds.age='24'中选择*;)@Hachi在字符串需要插入.q.insert(query.indexOf(“WHERE”)+5,“ds.status='VALID'AND”)之前设置一个空格;给出java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:22异常。由此我了解到,根据java,字符串长度不是22个字符。但是从ds中选择*其中ds.age='24';包含22个字符@学生:
q
是什么?我想你应该用
query
。好的,我想我最好用replace()。谢谢大家。:)但我很想知道为什么insert()抛出StringIndexOutOfBoundsException。对此有什么想法吗?根据,当偏移量无效时会引发StringIndexOutofBoundsException-如果运行
query.insert(query.indexOf(“WHERE”),“ds.status='VALID'和”)
on
SELECT*FROM-ds,其中ds.age='24'
,是否可以在不包含“WHERE”的字符串上运行代码?好的,所以我想最好使用replace()。谢谢大家。:)但我很想知道为什么insert()抛出StringIndexOutOfBoundsException。对此有什么想法吗?根据,当偏移量无效时会引发StringIndexOutofBoundsException-如果运行
query.insert(query.indexOf(“WHERE”),“ds.status='VALID'和”)
on
SELECT*FROM-ds,其中ds.age='24',是否可以在不包含“WHERE”的字符串上运行代码?