让我们以这个字符串为例:
Select * from tbl_users where age>@age and name=@name or lastname=@lastname order by @thing
我要完成的工作是用@符号后的长度替换字符串。然后删除该符号。
所以输出看起来像这样:
Select * from tbl_users where age>3 and name=4 or lastname=8 order by 5
到目前为止,我已经尝试使用正则表达式进行此操作,因此它是任何类似字符串的通用方法。但是不能完全使其发挥作用...
任何帮助,将不胜感激。
编辑:与sql /数据库无关。 此字符串只是复杂性的示例
答案 0 :(得分:1)
您可以尝试使用Pattern类,
import java.util.*;
import java.util.regex.*;
public class MyClass {
public static void main(String args[]) {
//Your Code here
String s = "Select * from tbl_users where age>@age and name=@name or lastname=@lastname order by @thing";
Pattern p = Pattern.compile("@(\\S*)");
Matcher m = p.matcher(s);
StringBuffer bufStr = new StringBuffer();
while (m.find()){
Integer i = m.group(1).length();
m.appendReplacement(bufStr,i.toString());
}
String s1 = bufStr.toString();
System.out.println(s1);
}
}
正则表达式:@(\\S*)
将匹配所有以@符号开头的非空白字符。上面代码的输出是
Select * from tbl_users where age>3 and name=4 or lastname=8 order by 5
答案 1 :(得分:0)
此:
public static String getReplace(String str, String symbol) {
String newString = str;
while (newString.contains(symbol)) {
int index = newString.indexOf(symbol);
int nextSpace = newString.indexOf(" ", index);
if (nextSpace == -1)
nextSpace = newString.length();
newString = newString.substring(0, index) + (nextSpace - index - 1) + newString.substring(nextSpace);
}
return newString;
}
public static void main(String[] args) {
String str = "Select * from tbl_users where age>@age and name=@name or lastname=@lastname order by @thing";
String symbol = "@";
str = getReplace(str, symbol);
System.out.println(str);
}
将打印
Select * from tbl_users where age>3 and name=4 or lastname=8 order by 5
答案 2 :(得分:0)
您可以为此使用正则表达式。以下正则表达式会将所有以@
符号开头的字符串进行分组,直到第一个空格或字符串结尾。
(@.*?)(?:\s|$)
此后,只需要遍历这些组并用自己的长度-1(因为@
符号是该组的一部分)来替换找到的组。
private static final String regex = "(@.*?)(?:\\s|$)";
private static final Pattern pattern = Pattern.compile(regex);
private static String replaceAnnotationsWithLength(String string) {
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
string = string.replace(matcher.group(1), Integer.toString(matcher.group(1).length() - 1));
}
return string;
}
现在打电话
replaceAnnotationsWithLength(
"Select * from tbl_users where age>@age and name=@name or lastname=@lastname order by @thing")
将返回
Select * from tbl_users where age>3 and name=4 or lastname=8 order by 5