我正在通过网络(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个空格?
答案 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(" ");
感谢每个人的帮助!