Java-Regex替换字符串中的八进制值
我有一组八进制值,比如(0177-0377)。每当我在字符串中找到这些值时,都必须替换为Java-Regex替换字符串中的八进制值,java,regex,ascii,octal,Java,Regex,Ascii,Octal,我有一组八进制值,比如(0177-0377)。每当我在字符串中找到这些值时,都必须替换为 String a= "sccce¼»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕerferferfer"; for (int i = 0177; i<= 0377 ; i++) { char x= (char) i; a= a.replaceAll(Character.toString(x), "?"); } System
String a= "sccce¼»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕerferferfer";
for (int i = 0177; i<= 0377 ; i++)
{
char x= (char) i;
a= a.replaceAll(Character.toString(x), "?");
}
System.out.print(a);
String a=“sccce¼»¼½¾À;
对于(int i=0177;i您可以使用此正则表达式[^\p{ASCII}]
,它替换所有非ASCII
字符:
a.replaceAll("[^\\p{ASCII}]", "?")
输出:
sccce????????????????????????????erferferfer
您必须从0177
中找到十六进制八进制字符的表示形式,由\x7F
表示,0377
由FF
对于您的情况,您可以使用:
a.replaceAll("[\\x7F-\\xFF]", "?")
您不希望一次就对整个文件执行此操作-您需要一种流式处理方法。我会这样做:
// TODO: Rename to something more appropriate
public static void replaceInvalidCharacters(Reader reader, Writer writer) {
char[] buffer = new char[16384]; // Adjust if you want
int charsRead;
while ((charsRead = reader.read(buffer)) > 0) {
for (int i = 0; i < charsRead; i++) {
if (buffer[i] >= 0177 && buffer[i] <= 0377) {
buffer[i] = '?';
}
}
writer.write(buffer);
}
}
文字“177”和“377”不是八进制文字-它们是十进制文字。如果您想要八进制值,请使用0177和0377。也不清楚为什么您认为正则表达式是这里的解决方案……对于这种情况,什么是最佳解决方案?我将使用读取器
,一次读取一段文本(进入字符数组),然后迭代char数组,替换该范围内的任何值,然后将该数据块写入编写器。重复此操作,直到您读取了文件中的所有内容。Regex也使用循环。不清楚您试图解决的问题是什么。您想替换八进制数,但正在将其转换为字符。不清楚是否ave ASCII或整个UTF字符集。你的问题中有太多不清楚/错误的地方,我的头很痛。如果你想替换八进制字符串?或者只是用八进制数字中给定位置的Unicode字符,请清楚地重写。我想,我正在寻找相同的方法。你能解释一下[^\\p{ASCII}]
?@Ajay这将替换所有非ASCII字符。有任何方法可以替换特定的一组八进制值。@Ajay您想替换什么?我想用?替换从0177到0377的八进制值范围,正如我在问题中提到的
if (buffer[i] > 126) // Or 127; what do you want to do with U+007F?