2013-05-20 66 views
-7

我试图创建一个方法,将接受2个字符串作为参数。第一个字符串将是一个短语,第二个也是一个前期。我想要的方法是比较两个字符串匹配的字符。如果字符串2具有在字符串1中找到的字符,则用下划线替换字符串2的字符实例。java方法返回一个修改后的字符串

例子:

这是输入:

phrase1 = "String 1" 
phrase2 = "Strone 2" 

输出字符串被称为newPhrase,它会从下划线内置的字符串:

newPhrase = "___one 2" 

它不为我工作我做错了什么。

public class DashedPhrase 
{ 
public static void main(String[] args) 
{ 
    dashedHelp("ABCDE","ABDC"); 
} 

public static String dashedHelp(String phrase1, String phrase2) 
{ 
    String newPhrase = "_"; 

    for(int i = 0; i < phrase.length(); i++) 
    { 
     if(phrase.charAt(i) == phrase2.charAt(i)) 
     { 
      newPhrase.charAt(i) += phrase2.charAt(i); 
     } 

    } 

    System.out.print(newPhrase); 
    return newPhrase; 
} 
} 
+3

你是什么意思“它不适合我”?什么不起作用? –

+0

另外,你的例子没有意义。为什么输出中的“n”? – jlordo

回答

0

newPhrase.charAt(i)不让你替换一个字符,它只是返回它。 Java的字符串是不可变的。我想改变它,你应该使用StringBuilder。查看replace(int start, int end, String str)方法。

-2

该示例中的代码甚至不会编译。

newPhrase.charAt(i) += phrase2.charAt(i); 

这是一个糟糕的任务。这与写作相同

newPhrase.charAt(i) = newPhrase.charAt(i) + phrase2.charAt(i); 

但'='左侧的表达式不是您可以正确指定值的内容。

+0

WTF?如果你打算倒下,说*为什么*。 – nsayer

+4

我没有downvote,但一个原因可能是,这不是一个答案... – jlordo

+0

这当然是一个答案,为什么给出的代码将不能正确编译... – nsayer

2

为了便于您理解,您可以使用StringBuilder及其方法setCharAt()

请注意i < phrase1.length() && i < phrase2.length()条件下的for循环。这是为了确保你不会得到任何异常。

public static void main(String[] args) 
{ 
    System.out.println("ABCDE"); 
    System.out.println("ABDC"); 
    dashedHelp("ABCDE","ABDC"); 
    System.out.println(); 
    System.out.println(); 
    System.out.println("String 1"); 
    System.out.println("Strone 2"); 
    String phrase1 = "String 1"; 
    String phrase2 = "Strone 2"; 
    dashedHelp(phrase1, phrase2); 
} 

public static String dashedHelp(String phrase1, String phrase2) 
{ 
    StringBuilder newPhrase = new StringBuilder(phrase1); 
    for(int i = 0; i < phrase1.length() && i < phrase2.length(); i++) 
    { 
     if(phrase1.charAt(i) == phrase2.charAt(i)) 
     { 
      newPhrase.setCharAt(i, '_'); 
     } 
    } 
    System.out.print(newPhrase); 
    return newPhrase.toString(); 
} 

输出:

ABCDE 
ABDC 
__CDE 

String 1 
Strone 2 
___i_g_1 
+0

为什么匹配的空格字符也被下划线替换? – jlordo

+1

@jlordo我相信你知道为什么:代码没有区分字符。我刚刚改变了他的代码,他似乎真的有麻烦。为了让它忽略空格字符很简单,你觉得我应该为空格字符添加一个例外吗? – acdcjunior

+0

我的不好,我的想法扭曲了。每个匹配角色都有一个下划线,因此有一个空间位置。说得通。 – jlordo

0

,因为你需要返回具有相同长度phrase2一个字符串,你需要遍历的phrase2每个字符,并替换这两个短语的匹配字符。当然,如果phrase2长于phrase1,则需要在答案中包含其余字符。你可以试试这个:

public static String dashedHelp(String phrase1, String phrase2) { 
    String ans = ""; 
    String subChar = "_"; 
    int i; 
    for(i = 0; i<phrase2.length(); i++) { 
     if(i<phrase1.length() && phrase1.charAt(i) == phrase2.charAt(i)) 
      ans += subChar; 
     else 
      ans += phrase2.charAt(i); 
    } 
    return ans; 
} 

希望它有助于


当然,如果你需要输出phrase1与在phrase2具有相同字符的地方下划线,你可以互换phrase2与在phrase1以上代码。


测试它

完整的类应该是这样的:

public class MyClass { 
    public static String dashedHelp(String phrase1, String phrase2) { 
     // The method code goes here 
    } 
    public static void main(String[] args) { 
     System.out.println(dashedHelp("String 1", "Strone 2")); 
    } 
} 

这个程序的输出为___o_e_2。这匹配(大约)您的期望输出。

+0

我看到了5个编译器错误,只是通过浏览代码... – jlordo

+0

@jlordo感谢您的反馈,我想我已经纠正了您遇到的错误。 – Barranka

相关问题