【问题标题】:Identify valid characters of a character array识别字符数组的有效字符
【发布时间】:2013-01-30 08:16:21
【问题描述】:

我收到一个包含有效和无效字符的字符数组。我只需要检索有效的字符。我该怎么做?

char[]ch = str.toCharacterArray();
for(int i=0;i<ch.length.i++){
    if(!Character.isLetter(ch[i]))
         system.out.println("not valid");
    else  
        system.out.println("valid");
}

我认为上面的代码不起作用,因为我对字符数组中的所有有效和无效字符都无效。

通过含义字符,我期待所有字母数字和特殊字符

注意:我是从服务器获取值,因此字符数组包含有效和无效字符。

【问题讨论】:

  • 您从谈论 字节数组 开始,然后您谈论 characters,并且您的代码有一个 string。它是哪一个?您指的是哪种“无效字符”?
  • 我看不出为什么服务器应该给你无效字符的充分理由,除非你得到的二进制数据恰好包含一些文本并且你不知道如何处理其余的内容。只有两个字符被定义为无效,但我怀疑您想要可打印的字符。
  • 我已经编辑了帖子,是的,我想要可打印的字符。
  • 如果服务器没有损坏,那么它会以某种格式向您发送“正确”的数据。我无法想象从数据中提取可打印字符最好是真正理解格式并提取您知道的必须是您关心的数据的情况。
  • 所以您只需要字母/数字,并删除所有空格和其他符号或控制字符?

标签: java bytearray


【解决方案1】:

试试下面的方法:

// assume input is not too large string
public static String extractPrintableChars(final String input) {
    String out = input;
    if(input != null) {
        char[] charArr = input.toCharArray();
        StringBuilder sb = new StringBuilder();  
        for (char ch : charArr) {
            if(Character.isDefined(ch) && !Character.isISOControl(ch)) {
                sb.append(ch);
            }
        }
        out = sb.toString();
    }
    return out;
}

【讨论】:

    【解决方案2】:

    看看Java 中可用的Matcher 类。我认为循环遍历所有字符直到有一个最大上限是不明智的。

    /[^0-9]+/g, '' 
    

    使用上面的正则表达式,它会清除除数字以外的所有字符,并注意。根据需要进行修改。

    问候 普尼斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 2015-04-30
      • 2011-09-12
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2012-11-16
      相关资源
      最近更新 更多