从字符串中修剪不可打印字符的更好方法是什么?

时间:2011-07-21 06:41:38

标签: java android

我正在从xml读取数据。当我在eclipse控制台中检查时,我发现我用一些方框获取整个数据。 示例如果excel表中有123,我会得到123个方框。我使用trim()来避免这些事情,但没有取得成功,因为trim()方法只修剪了空格。但是我发现这些字符的ASCII值为-17,-20 .. 我不想仅修剪那些方框的白色空间

所以我使用以下方法修剪这些角色,并取得了成功。

修剪字符串的更合适的方法是什么

修剪字符串

String trimData(String accessNum){
        StringBuffer sb = new StringBuffer();
        try{
            if((accessNum != null) && (accessNum.length()>0)){
//              Log.i("Settings", accessNum+"Access Number length....."+accessNum.length());
                accessNum = accessNum.trim();
                byte[] b = accessNum.getBytes();
                for(int i=0; i<b.length; i++){
                    System.out.println(i+"....."+b[i]);
                    if(b[i]>0){
                        sb.append((char)(b[i]));
                    }
                }
//              Log.i("Settigs", accessNum+"Trimming....");
            }}catch(Exception ex){

            }
            return sb.toString();
    }

2 个答案:

答案 0 :(得分:3)

<强> 被修改

使用Normalizer(自java 6开始)

public static final Pattern DIACRITICS_AND_FRIENDS 
        = Pattern.compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");


private static String stripDiacritics(String str) {
        str = Normalizer.normalize(str, Normalizer.Form.NFD);
        str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll("");
        return str;
}

herehere是完整的解决方案。

如果您只想从字符串中删除所有不可打印的字符,请使用

rawString.replaceAll("[^\\x20-\\x7e]", "")

参考:replace special characters in string in javaHow to remove high-ASCII characters from string like ®, ©, ™ in Java

答案 1 :(得分:1)

试试这个:

  str = (str == null) ? null :
     str.replaceAll("[^\\p{Print}\\p{Space}]", "").trim();