我的问题是我需要以视觉上引人注目的方式识别两个给定字符串之间不同的字符。在两行上输出两个输入字符串,然后使用句点(对于相同的字符(和星号(对于不同的字符(标识下面行的差异。例如:
ATCCGCTTAGAGGGATT
GTCCGTTTAGAAGGTTT
*....*.....*..*..
我尝试相互编写两个字符串,但我不知道如何让程序检查字符串中的每个字符,看看它们是否匹配
这就是我到目前为止所做的:/
System.out.println("String 1: ");
String var1 = Scanner.nextLine();
System.out.println("String 2: ");
String var2 = Scanner.nextLine();
if (same (var1, var2))
System.out.println(".........");
else
System.out.println("********");
public static boolean same (String var1, String var2){
if (var1.equals(var2))
{
return true;
}
else
{
return false;
}
谁能帮我解决这个问题?
您需要遍历字符串并逐个比较字符。要运行您的列表,您可以制作一个 for 循环。使用 int 作为计数器,并使用方法 length()
获取字符串大小。
for(int i=0; i<string1.length(); i++ {
// do stuff
}
然后,由于您有一个计数器穿过字符串的所有位置,因此您可以使用方法 charAt()
获取此字符串中特定位置的字符
char char1 = string1.charAt(i);
然后比较字符以检查它们是否相同。如果他们打印一个点.
如果他们不打印一个星号*
if(char1 == char2) {
System.out.print(".");
} else {
System.out.print("*");
}
在上面的部分中,我认为您的两个字符串具有相同的大小。如果不是这种情况,您可以首先确定哪个是最小的(因此哪个是最大的(:
String smallestString;
String biggestString;
if(string1.size() > string2.sise()) {
smallestString = string2;
biggestString = string1;
else {
smallestString = string1;
biggestString = string2;
}
然后让你的for循环通过最小的字符串,否则你将面临IndexOutOfBoundsException。
for(int i=0; i<smallestString.length(); i++ {
// do stuff
}
并且此循环的末尾为最大字符串中留下的字符打印星号
for(int j=smallestString.length(); j<biggestString.length(); j++) {
System.out.print("*");
}
这就是我想出的。请注意,有更好的方法来做到这一点,我刚刚写了与你在问题中付出的一样多的努力。
public class AskBetterQuestion{
public static void main(String[] args) {
// TODO Auto-generated method stub
String w1="ATCCGCTTAGAGGGATT";
String w2="GTCCGTTTAGAAGGTTT";
char[] first = w1.toCharArray();
char[] second = w2.toCharArray();
int minLength = Math.min(first.length, second.length);
char[] out=new char[minLength];
for(int i = 0; i < minLength; i++)
{
if (first[i] != second[i])
{
out[i]='.';
}
else out[i]='*';
}
System.out.println(w1);
System.out.println(w2);
System.out.print(out);
}
}