【问题标题】:Remove a character from java string using hex code使用十六进制代码从java字符串中删除一个字符
【发布时间】:2018-04-27 09:00:57
【问题描述】:

我想使用十六进制代码从 java 字符串中删除一个字符:

我正在尝试以下代码,但似乎不正确,因为字符没有被替换:ÿ

String str ="test  ÿ";
str.replaceAll("\\x{9F}","")

十六进制代码的语法有什么问题吗?谢谢。

【问题讨论】:

  • ÿ 不是以 ASCII 开头的。那个字符是U+00FF - 我不知道你为什么期望正则表达式匹配它。您不使用 replaceAll 的返回值这一事实也无济于事。
  • 你为什么不直接使用str.replaceAll("ÿ","");?这不应该工作吗?
  • \x{9F} 是一种在正则表达式模式中定义 Unicode 代码点的 PCRE 方式。在 Java 中,使用 \uXXXX 表示法。只需 str = str.replace("ÿ","") 也可以。
  • @Meryem 这不是 Jon 的意思。 replaceAll 的返回是唯一相关的事情,因为 Java 字符串是不可变的。您需要执行 str = str.replaceAll(...) 以使其对 str 产生任何影响。
  • @Meryem:所以在 Java 字符串文字中使用十六进制值,而不是无缘无故地通过正则表达式:str = str.replace("\u00ff", "");

标签: java regex hex


【解决方案1】:

你能试试这个吗:

    public class AsciiHexCode {
    public static void main(String[] args) {
        String  str = "test  ÿ";
        String result = str.replaceAll("[^\\x00-\\x7F]", "");
        System.out.println("result : "+ result);
    }
}

【讨论】:

【解决方案2】:

正如乔恩所说,要马赫 ÿ 你需要 \u00ff。

String replaced = str.replace("\u00ff", "");

在你的情况下。

【讨论】:

  • 我会在这里使用replace 而不是replaceAll,因为它在概念上很简单——只需替换一个字符串而不是一个正则表达式模式。
  • 我会试试这个并提供反馈
  • \ 的双重转义是错误的,不是吗?好的,replaceAll 没有错,但是没必要……
  • Jon replace 在这种情况下就足够了,你是对的。 Ctx 是的,替换是错误的,所以最好像你说的那样把它写成 \u。按照你的建议改了,这样比较好。
猜你喜欢
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2018-01-02
  • 2015-10-09
  • 1970-01-01
相关资源
最近更新 更多