用户将输入两个字符串值,a和b。我的代码将创建一个更大的字符串,该字符串由a的第一个字符,b的第一个字符,a的第二个字符,b的第二个字符组成,依此类推。任何剩余的字符都放在结果的末尾。我该怎么做最简单的方法?我对如何开始感到困惑。
System.out.print("Enter 2 words");
String s1 = input.nextLine();
String s2 = input.nextLine();
int num = 0;
for (int i = 0; i<s1.length();i++) {
char a = s1.charAt(i+num);
num++;
}
答案 0 :(得分:1)
您可以使用StringBuilder
来实现:
StringBuilder result = new StringBuilder(s1);
for (int i = 0; i < s2.length(); i++) {
result.insert(Math.min(i * 2 + 1, result.length()), s2.charAt(i));
}
System.out.println(result.toString());
首先,创建一个StringBuilder
,其字符串为s1
作为输入。现在,您可以遍历字符串s2
的长度,并将每个字符插入result
中。 Math.min()
用于防止StringIndexOutOfBoundsException
。
s1 = "TEST"
和s2 = "test"
的结果是:
TtEeSsTt
s1 = "TESTASDF"
和s2 = "test"
的结果是:
TtEeSsTtASDF
s1 = "TEST"
和s2 = "testasdf"
的结果是:
TtEeSsTtasdf
答案 1 :(得分:1)
这是另一种实现方式,也使用StringBuilder
,但是通过仅使用append()
而不是insert()
来减少字符移动。
static String mix(String s1, String s2) {
int len = Math.min(s1.length(), s2.length());
StringBuilder buf = new StringBuilder();
for (int i = 0; i < len; i++) {
buf.append(s1.charAt(i)).append(s2.charAt(i));
}
return buf.append(s1.substring(len)).append(s2.substring(len)).toString();
}
基本上,它将两个输入都起作用的部分的结果附加字符,然后从较长的输入中附加其余部分(依靠substring(len)
从较短的输入中返回空字符串)。
测试
System.out.println(mix("TEST", "test"));
System.out.println(mix("TESTASDF", "test"));
System.out.println(mix("TEST", "testasdf"));
System.out.println(mix("", ""));
输出
TtEeSsTt
TtEeSsTtASDF
TtEeSsTtasdf
????
如您所见,该代码无法处理Basic Multilingual Plane之外的字符,因为这些字符存储为一对替代字符。为此,您可以更改为以下代码(Java 8 +):
static String mix(String s1, String s2) {
int[] a1 = s1.codePoints().toArray();
int[] a2 = s2.codePoints().toArray();
int[] r = new int[a1.length + a2.length];
for (int i1 = 0, i2 = 0, j = 0; j < r.length; ) {
if (i1 < a1.length)
r[j++] = a1[i1++];
if (i2 < a2.length)
r[j++] = a2[i2++];
}
return new String(r, 0, r.length);
}
输出
TtEeSsTt
TtEeSsTtASDF
TtEeSsTtasdf