从字符串中删除字符'\u202A' 8234

4

我正在尝试获取字符串中索引为0的字符:

public static String editNoHP (String noHP){
  String result;
  try {
      if(noHP.charAt(0) == '0')
          result = "62"+noHP.substring(1);
      else if(noHP.charAt(0) == '+' )
          result = noHP.substring(1);
      else if(noHP.charAt(0) == '6')
          result = noHP;
      else if(noHP.charAt(0) == '6' && noHP.charAt(1) == '2')
          result = noHP;
      else if(noHP.charAt(0) == '9')
          result = noHP;
      else
          result = "62"+noHP;
  }
  catch (Exception e){
      return "";
  }

  return result.replaceAll("[\\s\\-\\.\\^:,]","");
}

当我查询联系人后,我使用这个函数,但是我发现了奇怪的结果。

常规输入和输出:

input = +62 111-1111-1111   output : 6211111111111
input = 011111111111        output : 6211111111111

这是一个奇怪的输入和结果:

input = 011111111111        output : 62011111111111

我尝试调试这个问题,发现当应用程序尝试获取第一个字符时,返回的是'\u202A' 8234,而不是0。

我已经尝试了正则表达式,例如:

String clean = str.replaceAll("[^\\n\\r\\t\\p{Print}]", ""); or
String clean = str.replaceAll("[^\\x20-\\x7E]", ""); or
String clean = str.replaceAll("[^\u0000-\uFFFF]", ""); or
String clean = str.replaceAll("[^\\p{ASCII}]", ""); or
String clean = str.replaceAll("[^\x00-\x7F]", ""); or
String clean = StringEscapeUtils.unescapeJava(str);

所有的返回值都是相同的,为 '\u202A' 8234。这个字符是什么?如何解决这个问题?
更新: 我尝试编辑这个奇怪的联系人,发现了奇怪的行为。这个电话号码是 011111111111。首先,我将光标放在数字 0 和 1 之间,然后按下删除/退格键以删除 0。光标突然移动到数字 1 的右侧而不是左侧。然后,我保存联系人并运行我的程序。结果是 0,而不是 '\u202A' 8234。所以我认为这是因为号码格式不正常,可能是第一次添加这个联系人或者从谷歌账户同步时出现的问题。

\u202A基本上是一个空格符号,可以参考http://unicode.org/cldr/utility/character.jsp?a=202A&B1=Show。 - Yamen Nassif
4个回答

1

最后,我发现可以使用正则表达式来替换非字母数字字符。

所以这是我的最终函数:

public static String editNoHP (String noHPinput){
    String result;
    try {
        noHPinput = noHPinput.trim();
        String noHP = noHPinput;
        noHP = noHP.replaceAll("[\\s\\-\\.\\^:,]","");
        noHP = noHP.replaceAll("[^A-Za-z0-9]","");
        char isinya = noHP.charAt(0);

        if(isinya == '0')
            result = "62"+noHP.substring(1);
        else if(isinya == '+' )
            result = noHP.substring(1);
        else
            result = noHP;

    }
    catch (Exception e){
        return "";
    }

    return result;
}

这个正则表达式除了字母数字字符外,可以删除所有Unicode字符。

我在代码中只有一个该字符的实例,需要一个更简单的解决方案,所以最终我使用了这段代码来解决问题:.Replace(((Char)8234).ToString(),"") 或者 .Replace((Char)8234,' ').Trime()。希望能对某些人有所帮助。 - AnAs51993

0

试一下这个

const getFirstChar = (string) => {
let editString = string?.trim();
if (editString?.charCodeAt(0) !== 8234) return editString?.charAt(0);
editString = editString.substring(1);
return getFirstChar(editString);
};

0

我也遇到了同样的问题!!我花了好几个小时来调试,因为当我打印字符串时,第一个字符显示为“?”,所以我以为它是一个问号。但其实不是!

然后我打印了第一个字符的数字值,结果是8234!我当时感觉很震惊,完全不知道为什么会显示为问号。


-1

1
谢谢您的回答。我尝试了这个方法,但结果仍然是'\u202A' 8234。我很困惑这是不是Unicode,因为结果中有8234。 - Yuddistira Kiki
这个解决方案不起作用。 - KADEM Mohammed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接