2014-01-15 68 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