在java中的每个字符串中替换一个字符

时间:2011-02-11 07:15:44

标签: java string

我想每次在字符串HELLO WORLD中找到字符串中的“L”时,用“x”代替。并且x每次出现时都会增加。

input: "HELLO WORLD"
output: "HExxxO WORxxxD"

仅使用字符串方法:.length; .indexOf; .substring.concat (or +).

修改

这是我的尝试:

public static String replace(String input,String pattern) { 

  String result = " "; 
  int stringLength; 
  int patternIndex; 

  while (input !=null) { 
    patternIndex = input.indexOf(pattern); 
    stringLength = input.length(); 
  } 

  return result; 
} 

我只找到模式的索引和更换字符时出现问题的字符串的长度。

9 个答案:

答案 0 :(得分:3)

第一:理智的解决方案:

StringBuilder  sb = new StringBuilder();
StringBuilder   r = new StringBuilder();
for( char c : "HELLO LAZY LIMBO WORLD" .toCharArray() ) {
  if( c == 'L' ) {
     sb.append(r.append('x'));
  } else {
    sb.append( c );
  }
}
return sb.toString() );

然后修改为仅使用有效方法的标准.length; .indexOf; .substring.concat (or +)(删除toCharArray();StringBuilder)< / p>

public static String replace( String input ){ 
  String replacement = "";
  int iot = -1;
  while( ( iot = input.indexOf('L')) > -1 ) { 
    input = input.substring(0,iot) +
           ( replacement+='x' ) +
            input.substring(iot+1);
  }
  return input;
}

那个看起来像一个for循环。让我们改变它!

只有两个语句(declr和for循环):

public static String replace( String in ){     
  String x = "";
  for( int i = 0;  ( i = in.indexOf('L',i)) > -1 ; 
          in = in.substring(0,i++) + ( x=x+'x' ) + in.substring(i) );
  return in;
}

收率:

HExxxO xxxAZY  xxxxIMBO WOxxxxxR

现在,那是!一个for循环。我几乎让Java看起来像perl。

答案 1 :(得分:2)

static String xform(String helloWorld) {
    if (helloWorld.intern() != "HELLO WORLD")
        throw new IllegalArgumentException("bad World");

    return "HExxxO WORxxxD";
}

这是一个非常特别的版本,适用于那些没有幽默感的人:特别版 - loplez&amp; funless

public class TheLoop {
  public static void main(String[] args) throws Throwable{
    System.out.println(xForm2("Hello World -L".toUpperCase(),0));
  }  
  static String xForm2(String s,int k){
    return k<-1?"x"+xForm2(s,k+1):(k==-1?"":("L".equals(s.substring(0,1))?xForm2(s,-(k+1)-1) :s.substring(0,1))+(s.length()==1?"":xForm2(s.substring(1), "L".equals(s.substring(0,1))?k+1:k)));
  }
}

200赏金,如果有人设法将功能写在一行(单个分号)并且比这更丑陋

答案 2 :(得分:1)

       char charToReplace = 'l';
        String str = " Hello World";
        char newChar = 'x';
        String newString = "x";
        StringBuilder result = new StringBuilder();
        for (int index = 0; index < str.length(); index++) {
            if (str.charAt(index) == charToReplace) {
                result.append(newString);
                newString += newChar;
            } else {
                result.append(str.charAt(index));
            }
        }
        System.out.println(result);

注意:可以优化

答案 3 :(得分:1)

String x_ify(String input) {
    String output = "";
    int start = 0;
    int count = 0;
    int nextL;
    while ((nextL = input.indexOf('L', start)) >= 0) {
        if (nextL > start) {
            output = output + input.substring(start, nextL);
        }
        ++count;
        for (int i = 0; i < count; ++i) {
            output = output + "x";
        }
        start = nextL + 1;
    }
    if (start < input.length()) {
        output += input.substring(start);
    }
    return output;
}

答案 4 :(得分:1)

一个无体的单行 for 语句,特别是对于bestsss:

public static String replace(String s) {
    for (String x="";  s.indexOf('L') > -1 ; s = s.substring(0,s.indexOf('L')) + ( x=x+'x' ) + s.substring(s.indexOf('L')+1) );
    return s;
}

答案 5 :(得分:0)

虽然没有使用您提到的标准功能,但这是另一种方式:

public static void  first()
    {
        String input = "HELLO WORLD";
        String X = "";

        int numofL = input.length() - input.replaceAll("L+", "").length();


        for(int i=0;i<numofL;i++)
            X += "x";

        String output = input.replaceAll("L+", X);
        System.out.println(output);
    }

答案 6 :(得分:0)

public static void main(String[] args) {
        String input = "HELLO WORLD";
        String output = "";
        String repl = "x";
        int idx, start = 0;
        while ((idx = input.indexOf('L', start)) > 0) {
            output += input.substring(start, idx);
            output += repl;
            start = idx + 1;
            repl += "x";
        }
        if (start < input.length()) {
            output += input.substring(start);
        }
        System.out.println(output);
    }

答案 7 :(得分:0)

public class Main {

public static void main(String[] args) {
    System.out.println(replace("hello world", "x"));
}

public static String replace(String in, String xs) {
    return in.indexOf("l") != -1 ? replace(in.substring(0, in.indexOf("l")) + xs + in.substring(in.indexOf("l") + 1), xs + "x") : in;
}

}

答案 8 :(得分:0)

public class ReplaceChar {

    public static void replaceChar(String s, StringBuilder sb, int depth){

        int i = s.indexOf('L');

        if(i==-1){
            return;
        }
        else
            sb.append(s.substring(0,i));
            for(int j=depth;j>0;j--){
                sb.append('x');
            }
            replaceChar(s.substring(i+1),sb,++depth);
    }

    public static void main(String[] args){

        StringBuilder sb = new StringBuilder();
        System.out.println("main "+sb);
        replaceChar("HELLO WORLD",sb,1);
    }
}