2

我正在从网络 (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 个空格替换 1 个或多个 -96 或任何空白空间?

4

4 回答 4

4

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

于 2013-04-19T16:39:32.883 回答
4

第一个字节 (-96) 是负数,因为在 Java 中字节是有符号的。它对应于字符 160 (256 - 96),它是一个不间断的空格。您需要直接在正则表达式中指定该字符。

str = str.replaceAll(String.valueOf((char) -96), " ");
于 2013-04-19T16:39:41.010 回答
1

您应该能够使用该Character.isSpaceChar功能来执行此操作。如对相关问题的回复中所述,您可以在 java regex 中使用它,如下所示:

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

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

于 2013-04-22T06:45:16.883 回答
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(" ");

感谢每个机构的帮助!

于 2013-04-22T06:31:11.857 回答