Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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_Remedy - Fatal编程技术网

Java智能替换字符串中的字符串部分需要吗?

Java智能替换字符串中的字符串部分需要吗?,java,string,remedy,Java,String,Remedy,我需要一些聪明的代码来告诉我如何做到这一点。我不能使用子字符串、拆分等,因为没有要搜索的特定字符。我曾考虑过循环字符串并读取每个字符,还有许多if语句要测试,但希望有一种更简单的方法 String str = "'1_First Name'='1_Johns' AND '200_Age' > '30' OR '123_Dog:name' IS 'Bolt'"; Output needed: "'1'='1_Johns' AND '200' > '30' OR '123' IS 'Bo

我需要一些聪明的代码来告诉我如何做到这一点。我不能使用子字符串、拆分等,因为没有要搜索的特定字符。我曾考虑过循环字符串并读取每个字符,还有许多if语句要测试,但希望有一种更简单的方法

String str = "'1_First Name'='1_Johns' AND '200_Age' > '30' OR '123_Dog:name' IS 'Bolt'";
Output needed: "'1'='1_Johns' AND '200' > '30' OR '123' IS 'Bolt'"
这是一个补救查询字符串。“1_First Name”是列名,“1_Johns”是列值

我在列名后面附加了列id,然后给出了例如:“1\u First Name”

在补救措施中,我们可以搜索列名或列ID。但是列名可以相同,但列ID是唯一的

这就是为什么只有字符串的某些部分必须被操作,而其他部分不能被操作的原因。

str=str.replaceAll(“('\\d+)[^']+”(?=\\s*([=!]| is)),“$1”);
str = str.replaceAll("('\\d+)_[^']+'(?=\\s*([<>=!]|IS))", "$1'");
  • ('\\d+)\u[^']+'
    是每个变量的匹配项
  • 对于下列运算符,使用前瞻
    (?=\\s*([=!]| IS))
    ; 具有模式的前瞻
    (?=…)
    \\s*([=!]| IS)

这或多或少地区分了变量和值,两者具有相同的规则模式。

您的示例不清楚,能否添加更多详细信息不确定还需要什么。我已经指定了所需的输入字符串和输出字符串。您还需要什么其他详细信息?为什么不用
'1'
替换
'1'
?我更新了问题。是的,我现在修复了它。谢谢。@Pshemo有一段时间我有这样的想法:“不要忘记最后的
;但是一个人会变老太棒了,非常接近。输出正在删除单个引号。我得到的是:1='1'u Johns'而不是'1'='1'u Johns'我把它改成了
“$1'
,谢谢Pshemo已经删除的评论。(1后面加一个撇号)太好了,谢谢。显然,您是正则表达式的主控程序。也许这会更易于阅读/维护
.replaceAll(“(?\\d+)[^']+”(?=\\s*([=!]| IS)),“${colID}”
。(1) 使用命名组可以更好地显示正则表达式(2)的意图,它将
'
移出组,并在替换开始时添加另一个
'
——这使它比替换结束时的单个皮屑
'
更不奇怪。