[英]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文件中執行此操作。
我們如何使用正則表達式來完成此任務。
您不想一次性對整個文件執行此操作-您需要一種流式處理方法。 我會做這樣的事情:
// 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.