【问题标题】:How do you remove non-ASCII characters (AltCodes) from a string in Java [duplicate]如何从 Java 中的字符串中删除非 ASCII 字符(Alt 代码)[重复]
【发布时间】:2021-03-17 18:00:00
【问题描述】:

如何从字符串中删除非 ASCII 字符(Altcodes),例如: → ← █ ◄ ► ∙

【问题讨论】:

  • yourStringVariable.replaceAll("[^\\x20-\\x7E]", "");.
  • 什么才是 AltCode? ö? ?表情符号?您只想保留 ASCII 字符吗?
  • 哦...为了清楚起见,ASCII 中的所有字符都有一个 ALT 代码(A 是 065,B 是 066,等等)。
  • 我只想保留ASCII字符

标签: java string replace ascii


【解决方案1】:

根据您的评论,“AltCode”指的是任何非 ASCII 字符。

解决此问题的一种方法是使用方法String.replaceAll(String regex, String replacement)。此方法用给定的替换字符串替换给定regular expression(正则表达式)的所有实例。

用给定的替换替换此字符串中与给定正则表达式匹配的每个子字符串。

Java 具有仅匹配 ASCII 字符的“\p{ASCII}”模式。这可以使用“[^…]”语法来否定,以匹配任何非 ASCII 字符。然后可以将匹配的字符替换为空字符串,从而有效地将它们从结果字符串中删除。

String s = "A→←B█◄C►";
String stripped = s.replaceAll("[^\\p{ASCII}]", "");
System.out.println(stripped); // Prints "ABC"

有效正则表达式模式字符的完整列表记录在 Pattern 类中。

注意:如果您要在一次运行中多次调用此模式,直接使用已编译的Pattern 比使用String.replaceAll 更有效。这样,模式只编译一次并重用,而不是每次调用replaceAll

public class AsciiStripper {
    private static final Pattern NON_ASCII_PATTERN = Pattern.compile("[^\\p{ASCII}]");
    
    public String stripAscii(String s) {
        return NON_ASCII_PATTERN.matcher(s).replaceAll("");
    }
}

【讨论】:

    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2023-03-18
    • 2010-12-04
    • 2018-07-30
    相关资源
    最近更新 更多