簡體   English   中英

Java-正則表達式替換字符串中的八進制值

[英]Java - Regex to replace Octal value in string

我有一組八進制值說(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);

但這在我們的文件較小時看起來不錯,但是我必須在1TB文件中執行此操作。

我們如何使用正則表達式來完成此任務。

您可以使用此正則表達式[^\\p{ASCII}]替換所有非ASCII字符:

a.replaceAll("[^\\p{ASCII}]", "?")

輸出:

sccce????????????????????????????erferferfer

您必須找到十六進制八進制字符的表示形式,從鏈接 0177表示為\\x7F0377表示為FF

對於您的情況,您可以使用:

a.replaceAll("[\\x7F-\\xFF]", "?")

Ideone演示

您不想一次性對整個文件執行此操作-您需要一種流式處理方法。 我會做這樣的事情:

// 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);
    }
}

因此,您需要為當前文件打開一個讀取器(具有適當的編碼),為輸出文件打開一個寫入器(具有適當的編碼),然后調用上述方法。 它將一次讀取一個數據塊,替換該數據塊中的所有“不良”字符,然后將其寫出到寫入器中。

無需正則表達式。

請注意,盡管有很多非ASCII字符超出該范圍-如果您確實要刪除所有非ASCII字符,則基本上需要

if (buffer[i] > 126) // Or 127; what do you want to do with U+007F?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM