在java中替换字符串中的特定字符集

在java中替换字符串中的特定字符集,java,Java,我有一根绳子(比如说) 我想将上面字符串中的标识符't'替换为其他字符串,如“abc”。在java中使用String的replaceAll()或replace()方法也会替换int中的char't'。所以我得到的结果是 "inabc abc=5;" 我只想替换标识符。请帮帮我。谢谢。我想这会有用的- yourString.replace(" t", " abc"); 我想这会管用的- yourString.replace(" t", " abc"); 您需要使用单词anchor(\b),如

我有一根绳子(比如说)

我想将上面字符串中的标识符
't'
替换为其他字符串,如
“abc”
。在java中使用String的
replaceAll()
replace()
方法也会替换int中的char't'。所以我得到的结果是

"inabc abc=5;"

我只想替换标识符。请帮帮我。谢谢。

我想这会有用的-

yourString.replace(" t", " abc");

我想这会管用的-

yourString.replace(" t", " abc");

您需要使用单词anchor(
\b
),如下所示:

正则表达式没有单词的概念



然而,这只会让你走到这一步;这个正则表达式可能在一些更复杂的构造上失败。如果您想要更复杂的替换,那么您确实想要使用解析器;例如,parboiled。

您需要使用单词anchor(
\b
),如下所示:

正则表达式没有单词的概念


然而,这只会让你走到这一步;这个正则表达式可能在一些更复杂的构造上失败。如果您想要更复杂的替换,那么您确实想要使用解析器;例如,我想你可以把“t=”改为“abc=”

我认为您可以将“t=”更改为“abc=”


使用以下regexp替换变量的所有匹配项,假设名称前后不能有任何类似单词的字符:

    String s = "int t=5";

    String s2 = s.replaceAll("(?<!\\w)t(?!\\w)", "abc");
String s=“int t=5”;

String s2=s.replaceAll(“(?使用以下regexp替换变量的所有匹配项,假设名称前后不能有任何类似单词的字符:

    String s = "int t=5";

    String s2 = s.replaceAll("(?<!\\w)t(?!\\w)", "abc");
String s=“int t=5”;

String s2=s.replaceAll(“(?准确地决定要替换的内容。是否要替换“tin”?“+t+”?“$t$”?“alphabet”?“titan”?如果整个字符串都是“t”?Java没有用于解析Java源代码的内置库,因此如果要解析Java源代码,您需要做大量工作(或为其查找库)。如果您正试图构建一个可以让您重命名变量的工具,则不必这样做。只需使用Eclipse之类的IDE,标记要替换的变量(或在其上设置光标)然后选择
Refactor
->
Rename..
。如果您不想使用IDE功能,那么您需要创建自己的Java解析器。Regex不是最好的工具。如果变量的名称与某些类相同,例如
String=“foo”;
?另一个解释正则表达式为何不适用于此的例子是隐藏变量,例如
inti=1;{inti=2;i++}
哪个
i
应该重命名?我实际上是在读取一个.java文件,然后将这个.java代码的所有标识符存储到pass 1中的一个集合中。然后在pass 2中,我使用这个集合来用该标识符的ceaser密码等价物替换标识符。是的,我知道如果标识符与java类名相同,它不起作用。所以你能给我推荐一个能找到所有标识符的解析器吗?决定你到底要替换什么。你想替换“tin”中的“t”?“+t+”?“$t$”?“alphabet”?“titan”?如果整个字符串都是“t”呢?Java没有用于解析Java源代码的内置库,因此如果您想解析Java源代码,您需要做大量的工作(或为其找到一个库)。如果您正试图构建一个工具来重命名变量,那么您就不必这样做。只需使用像Eclipse这样的IDE,标记要替换的变量(或在其上设置光标)然后选择
Refactor
->
Rename..
。如果您不想使用IDE功能,那么您需要创建自己的Java解析器。Regex不是最好的工具。如果变量的名称与某些类相同,例如
String=“foo”;
?另一个解释正则表达式为何不适用于此的例子是隐藏变量,例如
inti=1;{inti=2;i++}
哪个
i
应该重命名?我实际上是在读取一个.java文件,然后将这个.java代码的所有标识符存储到pass 1中的一个集合中。然后在pass 2中,我使用这个集合来用该标识符的ceaser密码等价物替换标识符。是的,我知道如果标识符与java类名相同,它不起作用。所以你能建议我一个能找到所有标识符的解析器吗?Thnx如果
t
=
之间有一个或多个空格,或者如果
t
是另一个单词的最后一个字符,比如
it=
?@Pshemo,这个问题只需要将第二个“t”改为“abc”,我认为这是一种快捷的方法。如果有其他需求,使用正则表达式是最好的方法。对于这种特殊情况,是的,您的解决方案会起作用,但这似乎只是OP真正想做的事情的一个例子,所以试着添加更一般的答案。如果
t
t之间有一个或多个空格,该怎么办=
?或者如果
t
是其他单词的最后一个字符,比如
it=
?@Pshemo,那么这个问题只需要将第二个“t”改为“abc”,我认为这是一种快捷的方法。如果有其他需求,使用正则表达式是最好的方法。对于这种特殊情况,是的,您的解决方案会起作用,但这似乎是OP真正尝试做的唯一示例,所以请尝试添加更一般的答案。
    String s = "int t=5";

    String s2 = s.replaceAll("(?<!\\w)t(?!\\w)", "abc");