我正在尝试创建一个接受2个字符串作为参数的方法。第一个字符串将是一个短语,第二个字符串也是一个短语。我想要的方法是比较匹配字符的两个字符串。如果字符串2有一个在字符串1中找到的字符,那么用字符串替换字符串2的字符实例。
示例:
这是输入:
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;
}
}
答案 0 :(得分:2)
为了便于您理解,您可以使用StringBuilder
及其方法setCharAt()
。
注意i < phrase1.length() && i < phrase2.length()
循环条件中的for
。这是为了确保您没有得到任何ArrayIndexOutOfBounds
例外。
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
答案 1 :(得分:0)
newPhrase.charAt(i)
不允许你替换一个字符,它只是返回.Java字符串是不可变的。我想要改变它你应该使用StringBuilder。查看replace(int start, int end, String str)
方法。
答案 2 :(得分: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
。这与(大约)您想要的输出相匹配。
答案 3 :(得分:-2)
示例中的代码甚至不会编译。
newPhrase.charAt(i) += phrase2.charAt(i);
这是一个糟糕的任务。它和写作一样
newPhrase.charAt(i) = newPhrase.charAt(i) + phrase2.charAt(i);
但是'='左侧的表达式不能正确分配值。