我有一个文件(prueba.txt),我想将0x14替换ascii字符0xE1(á),0x15替换0xE9(é),0x16替换0xF3(ó)...字符串可以{{ 1}}但它是一个字符。
String.replace()
我猜这段代码有很大改进,但是......
问候。
答案 0 :(得分:2)
首先阅读文本文件,然后替换字符。
<强>读强>
文本文件具有一些特定的字符集和编码。您必须确切地知道它是什么,或者肯定是系统默认的ANSI字符集和编码。 ANSI不是一种特定的编码。
但是,既然你说ANSI,你可能意味着系统默认。您使用的Scanner
构造函数是Java的默认构造函数。您可以合理地假设Java的默认值与系统默认值正确匹配。
替换字符
Java的String
,char
和Character
数据类型以及分析的Java源文件中的所有“字符”都是UTF-16代码单元,其中一个或两个编码Unicode代码点。未转义的文字字符串和字符将在源文件的编码中。 (当然,应该是UTF-8。)无论如何,如果你输入它,看到它,保存它并用相同的编码编译它,字符将是你认为它们。
因此,一旦您在字符串中包含文本,就可以替换,替换,替换,如下所示:
frase
.replace('á', '►')
.replace('é', '☼')
.replace('ñ', '◄')
或
frase
.replace('\u00E1', '\u25B6')
…
BTW-0x14,0x15,0x16是{,{3}}字符集的一个编码中►,☼,◄的编码。
如果您更愿意遍历String的元素,则可以通过每个UTF-16代码单元执行此操作,例如使用charAt
。如果所有文本都是UTF-16只使用一个代码单元编码的字符,那么这将最有效。鉴于您的文件编码是欧洲语言的ANSI字符集之一,可能就是这种情况。或者,您可以使用代码点感知技术进行迭代,如OEM437上的Java文档中所示。
答案 1 :(得分:0)
它更好char
,因为你可以这样做:
yourStringToReplace.replace(0xe1);
char
是一个integer
,被威胁为一个数字的角色(简单来说)
答案 2 :(得分:0)
这将替换字符并创建一个新文件&#34; nueva_prueba.txt&#34;使用更改的文本
public class Reemplazar {
public static void main(String[] args) throws IOException
{
BufferedWriter out;
File f = new File("nueva_prueba.txt");
f.createNewFile();
out = new BufferedWriter(new FileWriter(f));
Scanner archivo = new Scanner(new File("prueba.txt"));
while(archivo.hasNextLine()) {
String frase = archivo.nextLine();
for (int i = 0; i < frase.length(); i++) {
char current = frase.charAt(i);
switch(current)
{
case 0xe1:
System.out.println("contiene la á: '"+frase+"'");
frase = frase.replace((char) 0xe1, (char) 0x14);
System.out.println("nova frase: "+frase);
break;
case 0xe9:
System.out.println("contiene la é: '"+frase+"'");
frase = frase.replace((char) 0xe9, (char) 0x15);
System.out.println("nova frase: "+frase);
break;
case 0xf3:
System.out.println("contiene la ó: '"+frase+"'");
frase = frase.replace((char) 0xf3, (char) 0x16);
System.out.println("nova frase: "+frase);
break;
//... outros / others
default:
break;
}
}
try{
out.write(frase);
out.newLine();
}catch(IOException e){
e.printStackTrace();
}
}
archivo.close();
out.close();
}
}
希望这有帮助!