Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Regex替换字符串中的八进制值_Java_Regex_Ascii_Octal - Fatal编程技术网

Java-Regex替换字符串中的八进制值

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

我有一组八进制值,比如(0177-0377)。每当我在字符串中找到这些值时,都必须替换为

    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?