Java Regex替换字符串中的负字节

时间:2013-04-19 16:29:14

标签: java regex

我正在通过网络(html)获取约会:“abril 2013 Viernes 19”

我已经尝试了所有正常的正则表达式但没有成功。

最后我发现了字符串字节(str.getBytes()),这是值:

[-96, 97, 98, 114, 105, 108, -96, -96, -96, 50, 48, 49, 51, -96, -96, 86, 105, 101, 114, 110, 101, 115, -96, 49, 57]

这是什么-96?

如何将1个或多个-96或任何空白空间替换为1个空格?

4 个答案:

答案 0 :(得分:4)

字节-96(十六进制的A0或无符号字节的160)是ISO-8859-1字符编码中的非中断空格,它可能是您用于将字符串转换为字节的编码。

答案 1 :(得分:4)

第一个字节(-96)是否定的,因为Java字节是有符号的。它对应于字符160(256-96),它是non-breaking space。您需要直接在正则表达式中指定该字符。

str = str.replaceAll(String.valueOf((char) -96), " ");

答案 2 :(得分:1)

您应该可以使用Character.isSpaceChar功能执行此操作。如a response to a related question中所述,您可以在这样的java正则表达式中使用它:

String sampleString = "\u00A0abril\u00A0\u00A02013\u00A0Viernes\u00A019";
String result = sampleString.replaceAll("\\p{javaSpaceChar}", " ");

我认为这将完全符合您的要求,同时避免任何处理原始字节的需要。

答案 3 :(得分:0)

我这样修好了(如果有人有更好的答案,我会很感激):

byte[] b=str.getBytes();
for (int i = 0; i < b.length; i++) {
    if (b[i]==-96)
        b[i]=" ".getBytes()[0];
}
String strOut=new String(b).trim();
Pattern blank=Pattern.compile("\\s+|\b+|\t+|\n+|\f+|\r+");
strOut=blank.matcher(strOut).replaceAll(" ");

感谢每个人的帮助!