我在最近的Java项目中遇到了麻烦。我试图只是字符串"白色"来自String。无论我尝试什么方法,最后一个" _"永远都是。
String questionText = "The white house is _white_";
String correctResponse = questionText.replace(questionText.substring(0, questionText.indexOf("_")+1), "");
correctResponse.substring(0,correctResponse.length()-1);
System.out.println(correctResponse);
答案 0 :(得分:2)
substring
不要修改原始对象。
使用
correctResponse = correctResponse.substring(0, correctResponse.length() - 1);
答案 1 :(得分:1)
我会使用正则表达式对下划线之间的所有内容进行分组,然后String.replaceAll(String, String)
实际删除除组之外的所有内容。像,
String correctResponse = questionText.replaceAll(".+\\s+_(.+)_", "$1"); // white
答案 2 :(得分:0)
使用lastIndexOf
String correctResponse = questionText.replace(questionText.substring(questionText.indexOf("_"), questionText.lastIndexOf("_")+1), "");
答案 3 :(得分:0)
如果你想要的字符串总是在下划线之间(或者至少在一个下划线之后),你可以只拆分字符串并在索引1处获取子字符串:
String correctResponse = questionText.split("_")[1];
答案 4 :(得分:0)
您认为复杂 - 为什么需要更换?您可以使用子字符串
实现相同的功能第一句话
String correctResponse = questionText.substring(questionText.indexOf("_")+1)
// ==> correctResponse = "white_"
第二个陈述
correctResponse = correctResponse.substring(0, correctResponse.indexOf("_"))
// ==> correctResponse = "white"
正如@neuo指出的那样,substring不会改变字符串..
答案 5 :(得分:0)
您只需要更改第3行。
原线: correctResponse.substring(0,correctResponse.length() - 1);
正确的线条: correctResponse = correctResponse.substring(0,correctResponse.length() - 1);
答案 6 :(得分:0)
如果使用正则表达式,则不必检查索引边界。
String string = "Merry Christmas!".replaceAll(".$", "");
System.out.println(string);
将打印出来
Merry Christmas