我正在尝试从我的应用程序中读取/sdcard/test.txt中的文本文件。我成功地将它读入缓冲区并重新编写它。正则表达式在一个在线测试器中工作,所以我不认为这是问题所在。我认为我的repalceAll()方法并不坚持。当我打开文件时,没有任何改变。我知道如何创建/覆盖文本文件,但是如何更改其中的特定字符串呢?
这是我到目前为止所拥有的:
fileName = Environment.getExternalStorageDirectory().getPath() + "/" + fileName;
File file = new File(fileName);
/*Toast.makeText(getBaseContext(),
fileName, Toast.LENGTH_SHORT).show();*/
try
{
BufferedReader buffer = new BufferedReader(new FileReader(fileName));
String sCurrentLine;
while ((sCurrentLine = buffer.readLine()) != null) {
Toast.makeText(getBaseContext(), sCurrentLine, Toast.LENGTH_SHORT).show();
regex(sCurrentLine);
}
buffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void regex(String chord) {
//String notes = "^[CDEFGAB]";
String notes = "^[C]";
String accidentals = "[#|##|b|bb]";
//String chords = "[maj7|maj|min7|min|sus2]";
String regex = notes + accidentals;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(chord);
//System.out.println("regex is " + regex);
if (matcher.find()) {
regex.replaceAll(regex, "D");
int i = matcher.start();
int j = matcher.end();
//System.out.println("i:" + i + " j:" + j);
}
else {
//System.out.println("no match!");
}
}
答案 0 :(得分:0)
看起来String.replaceAll()
不会修改参数,而是返回一个新字符串。但是,您没有在代码中以任何方式使用返回值,因此这可能是您的问题。 String是不可变的,对其进行修改的方法将始终返回一个全新的String。