java字符串操作

时间:2011-03-18 16:52:10

标签: java string

好的,所以我试着在你的帮助下学习更多关于字符串和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函数。

8 个答案:

答案 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)

  1. 问题是sb.insert(i,“not”);应该是sb.insert(i + 1,“not”);
  2. 我认为正则表达式就是这种情况下的解决方案。

答案 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;
}

这似乎很复杂,但是我是第一次尝试。