Java 用字符代码代替正则表达式替换字符串?

Java 用字符代码代替正则表达式替换字符串?,java,regex,string,character-encoding,replace,Java,Regex,String,Character Encoding,Replace,Java或任何其他第三方库是否提供了API,用于根据已知字符集(当然不是正则表达式)中的字符代码替换字符?例如,要将给定字符串中的双引号替换为单引号,可以使用: String noDoubles = containsDoubles.replace("\"", "'"); 但是,双引号的UTF-8字符代码为U+0022。那么,是否有任何东西可以搜索U+0022字符的实例并用单引号替换它们 此外,这里不只是询问双引号/单引号,我所说的是字符代码查找和替换,可以使用任意2个字符 只需使用unicod

Java或任何其他第三方库是否提供了API,用于根据已知字符集(当然不是正则表达式)中的字符代码替换字符?例如,要将给定字符串中的双引号替换为单引号,可以使用:

String noDoubles = containsDoubles.replace("\"", "'");
但是,双引号的UTF-8字符代码为U+0022。那么,是否有任何东西可以搜索U+0022字符的实例并用单引号替换它们


此外,这里不只是询问双引号/单引号,我所说的是字符代码查找和替换,可以使用任意2个字符

只需使用unicode文本:

// I'm using an unicode literal for "
String noDoubles = containsDoubles.replace('\u0022', '\'');

以上内容适用于任何字符,只要您知道其对应的代码。

只需使用unicode文字:

// I'm using an unicode literal for "
String noDoubles = containsDoubles.replace('\u0022', '\'');

以上内容适用于任何字符,只要您知道其对应的代码。

使用重载版本-该版本接受字符。因此,您可以这样使用它:

String str = "aa \" bb \"";
str = str.replace('\u0022', '\'');
System.out.println(str);  // aa ' bb '

使用重载版本-它接受字符。因此,您可以这样使用它:

String str = "aa \" bb \"";
str = str.replace('\u0022', '\'');
System.out.println(str);  // aa ' bb '

您还可以使用正则表达式。从:

\xhh十六进制值为0xhh的字符

\uhhh十六进制值为0xhhh的字符

因此,你可以这样写:

String noDoubles = containsDoubles.replace("\\u0022", "'");

您还可以使用正则表达式。从:

\xhh十六进制值为0xhh的字符

\uhhh十六进制值为0xhhh的字符

因此,你可以这样写:

String noDoubles = containsDoubles.replace("\\u0022", "'");

就我个人而言,我认为“\u0022”更清楚你在做什么。对于已经发布的一些答案,我的回答是:对于U+0020到U+007E范围内的字符,请不要使用Unicode文本。显然,人们很容易认为它们的工作原理与字符串或字符文本中的其他转义序列一样,如\n,但事实并非如此;在Java中,它们会被更早地解释,并且会影响语法。只是为了好玩,试着在脑海中猜测这将输出什么:System.out.println\u005c\u006n.length;,然后试试它,看看它实际输出的是什么。@ajb由于不允许使用非法的unicode转义码n,所以它不能编译:@PhilippWendler Duh。它应该是System.out.println\u005c\u006e.length;就我个人而言,我认为“\u0022”更清楚你在做什么。对于已经发布的一些答案,我的回答是:对于U+0020到U+007E范围内的字符,请不要使用Unicode文本。显然,人们很容易认为它们的工作原理与字符串或字符文本中的其他转义序列一样,如\n,但事实并非如此;在Java中,它们会被更早地解释,并且会影响语法。只是为了好玩,试着在脑海中猜测这将输出什么:System.out.println\u005c\u006n.length;,然后试试它,看看它实际输出的是什么。@ajb由于不允许使用非法的unicode转义码n,所以它不能编译:@PhilippWendler Duh。它应该是System.out.println\u005c\u006e.length;以上内容将无法编译。编译器在处理过程中很早就用实际字符替换\uhhh。因此,你的陈述的一部分相当于“;这是非法的,因为您有一个未关闭的引号。我试过了。此外,replace不使用regex replaceAll。这应该有效:replaceAll\\u0022';虽然与仅使用replace“”相比,它似乎相当沉重,“\@哦,是的,谢谢。我最近在ant文件中做了一些正则表达式,在这些文件中您不必逃避以上内容将无法编译。编译器在处理过程中很早就用实际字符替换\uhhh。因此,你的陈述的一部分相当于“;这是非法的,因为您有一个未关闭的引号。我试过了。此外,replace不使用regex replaceAll。这应该有效:replaceAll\\u0022';虽然与仅使用replace“”相比,它似乎相当沉重,“\@哦,是的,谢谢。我最近在ant文件中做了一些正则表达式,在这些文件中您不必逃避这行不通\u0027'不会编译,因为\u0027很早就被替换为一个单引号,因此这与放置替换'\u0022','的结果相同;在代码中,这在语法上是不正确的。我刚试过,但编译器拒绝了。这行不通\u0027'不会编译,因为\u0027很早就被替换为一个单引号,因此这与放置替换'\u0022','的结果相同;在代码中,这在语法上是不正确的。我刚试过,编译器拒绝了。