2014-01-15 39 views
0

我有一个项目可以用一个单词替换字母b和i。这个词是“大”,它包含两个字母。我必须用字母来代替它。 b与鳍和我与引导。如果我在阵列中替换它,我将被替换,所以我最终得到了“fbootnbootn”,因为在fin中我被替换了。如何替换单词中的多个值

或者我现在在代码中的方式是将b替换为新字符串,并将i替换为另一个字符串。

import java.util.Scanner; 


public class Crypto { 

    public String org; 
    public String sb; 


    public String encrypt(String org){ 

     int index1=-1; 
     Scanner sc = new Scanner(org); 
     System.out.println ("here is org "+org); 
     String s1[] = new String[100]; 

     while (sc.hasNext()) 
     { 
      index1++; 
      s1[index1] = sc.nextLine(); 
      System.out.println(s1[index1]); 
     } 
     for (int j=0; j <=index1; j++) 
     { 
     String NewString=""; 
     System.out.println("array "+ s1[j]); 
     Scanner sc2= new Scanner (s1[j]); 

     while (sc2.hasNextLine()) 
      { 
      String[] split =sc2.nextLine().split(" "); 
      int ding=0; 
      for (int k=0; k<(split.length); k++) 
      { 

       if (split[ding].contains("v")) 
       { 
       String nw=split[ding].replace ("v", "ag,r"); 
       NewString = NewString +" "+ nw; 
       System.out.println(split[ding] + " " +NewString); 
       } 
       if (split[ding].contains("m")) 
       { 
       String nw=split[ding].replace ("m", "ssad"); 
       NewString = NewString +" "+ nw; 
       System.out.println(split[ding] + " " +NewString); 
       } 
       if (split[ding].contains("g")) 
       { 
       String nw=split[ding].replace ("i", "boot"); 
       NewString = NewString +" "+ nw; 
       System.out.println(split[ding] + " " +NewString); 
       } 
       if (split[ding].contains("b")) 
       { 
       String nw=split[ding].replace ("b", "fin"); 
       NewString = NewString +" "+ nw; 
       System.out.println(split[ding] + " " +NewString); 
       } 
       ding++; 
      //NewString=NewString+" "; 


      org=NewString; 
      } 
      } 

    } 

     return org; 
} 
} 
+0

对于每个字,则步骤通过每个字母并测试它是否应该被更换,然后添加任一原信或替换为'newString'(变量名应该以小写字母开始将它们与类名称区分开来)。 – iamnotmaynard

回答

0

试试这个:

public String myreplace(String s) { 
    String r = ""; 
    for (int i=0; i<s.length(); i++) { 
     if (s.charAt(i) == 'b') { 
      r = r + "fin"; 
     } else (s.charAt(i) == 'i') { 
      r = r + "boot"; 
     } else { 
      r = r + s.charAt(i); 
     } 
    } 
    return r; 
} 

代码不编译,但你的想法

0

您大幅过于复杂的事情。字符串实际上是一个字符数组,所以你可以循环一个字符串。然后,检查下一个字符是b还是i,如果是,则将所需的替换添加到结果中。否则,只需添加该索引处的字符即可。

public class ReplaceLetters { 

    public static void main(String[] args) {  
     String original = "big"; 
     String bReplacement = "fin"; 
     String iReplacement = "boot"; 
     String res = ""; 

     for (int i = 0; i < original.length();i++) { 
      if (original.charAt(i) == 'b') 
       res += bReplacement; 
      else if (original.charAt(i) == 'i') 
       res += iReplacement; 
      else 
       res += original.charAt(i); 
     } 

     System.out.println(res); 
    } 
} 
0

我会做类似下面。但是,使用StringBuilder,并不断加入到它,如果它需要更换。在默认的开关只需要添加任何被通过。

public string encrypt(String word) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for(int i = 0; i < word.length; i++) 
    { 
     switch(word.charAt(i).ToLower()) 
     { 
      case 'b' : 
      sb.Append("fin"); 
      break; 
      .... 
      default : 
      sb.Append(word.charAt(i)); 

     } 
    } 

     return sb.toString(); 
} 
0

的问题是类似于在DB交换两列之间的值,你需要一个第三变量在这里。这里有一个例子:

// string not present in your input text 
String unusedString = "~~~~"; 
// replace "i" with the special character, output "b~~~~g" 
String temp = "big".replaceAll("i", unusedString); 
System.out.println(temp); 
// replace "b" with "fin", output "fin~~~~g" 
temp = temp.replaceAll("b", "fin"); 
System.out.println(temp); 
// replace special character (just the old "i"s) with "boot", output "finbootg" 
temp = temp.replaceAll(unusedString, "boot"); 
0

StringUtils.replaceEach下议院郎能有所帮助。

public static String stringReplace(String inputString) { 
    String[] searchArray = new String[]{"b", "i"}; 
    String[] replaceArray = new String[]{"fin", "boot"}; 
    return StringUtils.replaceEach(inputString, searchArray, replaceArray); 

} 

Input:大

Output:finbootg

Input:BBG

Output:finfing

Input:BII b

Output:finbootbootfin

+0

什么是StringUtils完全限定的类名? – SergeyB

+0

org.apache.commons.lang.StringUtils 您需要在您的类路径中使用commons-lang.jar。 – gsndev