好的,所以我试着在你的帮助下学习更多关于字符串和Java中的Chaining Strings。
现在我知道字符串是不可变的,但我现在很难做到这一点:
实施方法
public static String notReplace(String str)
该方法以String作为输入 并返回一个String,其中包含每个 出现小写字“是” 已被“不是”取代。该 单词“是”不应该立即2 之前或之后是一封信 - 所以 例如,“这”中的“是”应该 不被替换。 (注意:
Character.isLetter(char)
测试a char是一封信。)
示例:
notReplace(“是测试”)→“不测试”
notReplace(“is-is wise”)→“不是 - 不是明智的”
这就是我写的:
public class NotReplace{
public static void main(final String[] args){
final String str2 = "is no";
System.out.println(notReplace(str2));
}
public static String notReplace(final String str){
final int times = str.length();
final StringBuilder sb = new StringBuilder(str);
for(int i = 0; i <= times; i++){
if((str.charAt(i) == 'i') && (str.charAt(i + 1) == 's')
&& !Character.isLetter(str.charAt(i + 2))){
sb.insert(i, "not");
}
final String str1 = sb.toString();
return str1;
}
}
}
我相信这是一个完整的混乱,我很乐意在这种情况下学习更多如何使用字符串。
由于
编辑:我不能使用replaceAll函数。
答案 0 :(得分:3)
你可能会发现这个有趣的
String text = "This is a test. It is"; // note the 'is' at the end.
String text2 = text.replaceAll("\\bis\\b", "is not");
System.out.println(text +" => "+text2);
打印
This is a test. It is => This is not a test. It is not
以下方法可以做到这一点
public static String notReplace(final String str){
final StringBuilder sb = new StringBuilder()
.append(' ').append(str).append(" ");
for (int i = 0; i < sb.length() - 2; i++) {
if (!Character.isLetter(sb.charAt(i)) &&
sb.charAt(i + 1) == 'i' &&
sb.charAt(i + 2) == 's' &&
!Character.isLetter(sb.charAt(i + 3))) {
sb.insert(i + 3, " not");
i += 5;
}
}
return sb.substring(1, sb.length() - 1);
}
将空格添加到开头和结尾以避免边界检查。
答案 1 :(得分:3)
如果我是你,我会采取以下方法。
第一步:考虑尽可能多的“好奇”的字符串:null, "", "i", "x", "is", "his", "ist", "list", "is it", "it is", "what is it", "what it is"
等等。
第二步:编写一个main()
方法,将所有这些值提供给notReplace()
方法并显示结果。 notReplace()
方法应该只返回参数。
public static String notReplace(final String str){
return str;
}
第三步。编译并测试它。这是一个重要的问题。不要一次写大块代码。写一点,重新编译它并检查它是否仍然有效。它听起来很慢,但比在200行代码中找到不匹配的花括号几个小时的根本要快得多。从现在开始,在每一步之间你应该重复这一步。
第四步:更改notReplace()
,以便找到"is"
子字符串。不要改变输出,只需做System.out.println( "Is found.");
。
第五步:通过检测前后字符(如果有的话)是否是字母来进一步扩展它。
第六步:在找到“是”之后插入“not”。
如果您按照这些步骤操作,您将能够逐步构建程序,并且因为您在两次测试之间只修改了几行,所以很容易找到任何错误。
答案 2 :(得分:1)
这是我的,安静而复杂
public String notReplace(String str) {
String result = "";
if(str.equals("is")) return "is not";
for(int i=0;i<str.length();i++){
if((i+2 < str.length() && str.substring(i,i+2).equals("is")
&& !Character.isLetter(str.charAt(i+2)) && (i==0 || !Character.isLetter(str.charAt(i-1)) )))
{//for is that are in between texts and at the start of the text
result += str.substring(i,i+2) + " not";
result+=str.charAt(i+2);
i = i + 2;
}
else if(i == str.length()-2 && str.substring(i).equals("is") && !Character.isLetter(str.charAt(i-1)) ){
// for "is" at the end
result += str.substring(i,i+2) + " not";
i = str.length();
}
else{// not a is
result+= str.substring(i,i+1);
}
}
return result;
}
答案 3 :(得分:0)
答案 4 :(得分:0)
String text = "This is a test";
String text2 = text.replaceAll(" is ", "is not");
System.out.println(text2);
答案 5 :(得分:0)
我,我喜欢递归:
public static String notReplace(String str) {
StringBuilder buffer = new StringBuilder();
notReplace(str, buffer);
return buffer.toString();
}
public static void notReplace(String str, StringBuilder buffer) {
if(str.length() < 3) {
buffer.append(str).toString();
}
else if ( str.startsWith("is ") ) {
notReplace(str.substring(3), buffer.append("is not "));
}
else {
notReplace(str.substring(1), buffer.append(str.charAt(0)));
}
}
答案 6 :(得分:0)
public String notReplace(String str) {
String outputStr = "";
int index = 0;
int lastSeen = 0;
if (str == "is")
return "is not";
for (int i = 0; i < str.length() - 2; i++) {
index = str.indexOf("is", lastSeen);
if (index == -1)
break;
if (index == 0 && !Character.isLetter(str.charAt(index + 2))) {
outputStr = outputStr + str.substring(lastSeen, index);
outputStr = outputStr + "is not";
lastSeen = index + 2;
} else if (index > 0 && index < str.length() - 2 && str.charAt(index + 2) == ' ' && str.charAt(index - 1) == ' ') {
outputStr = outputStr + str.substring(lastSeen, index);
outputStr = outputStr + "is not";
lastSeen = index + 2;
} else if (index == (str.length() - 2) && !Character.isLetter(str.charAt(index - 1))) {
outputStr = outputStr + str.substring(lastSeen, index);
outputStr = outputStr + "is not";
lastSeen = index + 2;
} else {
if (lastSeen < str.length()) {
outputStr = outputStr + str.substring(lastSeen, index);
outputStr = outputStr + "is";
}
lastSeen = index + 2;
}
}
if (lastSeen < str.length())
outputStr = outputStr + str.substring(lastSeen);
return outputStr;
}
}
答案 7 :(得分:0)
public String notReplace(String str) {
String a = "";
int i = 0;
if(str.length()<2)
{return "";}
else if(str.length()==2 && (!(str.substring(0).equals("is"))))
{return "";}
else if(str.length()==2)
{return "is "+"not";}
while(i<str.length()){
if(i==0&& str.substring(0,2).equals("is")&&Character.isLetter(str.charAt(2))==false)
{a+= str.substring(0,2)+" not";
i+=2;}
else if(i>1&&i<str.length()-2&&str.substring(i,i+2).equals("is")&&Character.isLetter(str.charAt(i-1))==false&&Character.isLetter(str.charAt(i+2))==false)
{a+= str.substring(i,i+2)+" not";i+=2;}
else if(i == str.length()-2 && str.substring(str.length()-2).equals("is")&&Character.isLetter(str.charAt(str.length()-3))==false)
{a+=str.substring(str.length()-2)+ " not";break;}
else
{a+= str.charAt(i);
i+=1;}
}
return a;
}
这似乎很复杂,但是我是第一次尝试。