组合字符串 - 相同字符的运行在一起
问题描述:
我创建了一个将两个给定字符串组合在一起的代码,并通过交替两个字符串中的字符来获取字符串。 例如:“xyz”和“abc”会得到“xaybzc”组合字符串 - 相同字符的运行在一起
我遇到的问题是,对于同一个字符的任何运行,这些字符应该保持在一起。 例如:“ABC”和“xyyz”会得到“axbyycz”
这是我写:
public static java.lang.String interleaveWithRuns(java.lang.String s, java.lang.String t)
{
String str = "";
int i = 0;
while(i < s.length() && i < t.length())
{
if(s.charAt(i) == s.charAt(i + 1))
{
str += s.charAt(i) + s.charAt(i+1);
}
if(t.charAt(i) == t.charAt(i+1))
{
str += t.charAt(i) + t.charAt(i+1);
}
str += s.charAt(i) +""+ t.charAt(i);
i++;
}
while(i < s.length())
{
str += s.charAt(i);
i++;
}
while(i < t.length())
{
str += t.charAt(i);
i++;
}
return str;
}
我知道,这部分是哪里出了问题来了,但我不知道我应该做些什么来解决这个问题。
if(s.charAt(i) == s.charAt(i + 1))
{
str += s.charAt(i) + s.charAt(i+1);
}
if(t.charAt(i) == t.charAt(i+1))
{
str += t.charAt(i) + t.charAt(i+1);
}
答
您可能仍然会碰到一个ArrayIndexOutOfBoundsException
如果,(s.charAt(i) == s.charAt(i + 1))
检查时,实际上没有s.charAt(i + 1)
,你已经打了字符串的结尾。使用递归可以避免这种干净:
public static String concat(String a, String b)
{
if(a.length() == 0){
return b;
}
if(b.length() == 0){
return a;
}
String a1 = "" + a.charAt(0);
int i = 1;
while(i < a.length() && a.charAt(i) == a.charAt(0))
{
a1 += a.charAt(i++);
}
String b1 = "" + b.charAt(0);
i = 1;
while(i < b.length() && b.charAt(i) == b.charAt(0))
{
b1 += b.charAt(i++);
}
return a1 + b1 + concat(a.substring(a1.length()), b.substring(b1.length()));
}
答
对于这个特定的问题,你应该跟踪2个字符串的迭代器。所以这不能通过一个迭代变量i
来完成。对于字符串s
和j
,字符串t
需要i
。
此外,为避免遇到数组超出限制的错误,特别是当相同的字符位于任何字符串的末尾时,两个字符串的条件都会添加短路条件。像这样:(i < s.length() - 1) && further condition
以下是对interleaveWithRuns
函数的更改。
public static java.lang.String interleaveWithRuns(java.lang.String s,
java.lang.String t) {
String str = "";
int i = 0;
int j = 0;
while (i < s.length() && j < t.length()) {
if ((i < s.length() - 1) && (s.charAt(i) == s.charAt(i + 1))) {
str += String.valueOf(s.charAt(i))
+ String.valueOf(s.charAt(i + 1));
str += String.valueOf(t.charAt(j));
i++;
} else if ((j < t.length() - 1) && (t.charAt(j) == t.charAt(j + 1))) {
str += String.valueOf(s.charAt(i));
str += String.valueOf(t.charAt(j))
+ String.valueOf(t.charAt(j + 1));
j++;
} else {
str += s.charAt(i) + "" + t.charAt(j);
}
i++;
j++;
}
while (i < s.length()) {
str += s.charAt(i);
i++;
}
while (j < t.length()) {
str += t.charAt(j);
j++;
}
return str;
}
希望这有助于。
谢谢!它完美的作品 – Zebs