所以我正在创建一个程序,它将输出字符串的第一个字符,然后输出另一个字符串的第一个字符。然后是第一个字符串的第二个字符和第二个字符串的第二个字符,依此类推。
我创建了下面的内容,我只是想知道是否有使用循环或其他东西而不是子串的替代方法
public class Whatever
{
public static void main(String[] args)
{
System.out.println (interleave ("abcdefg", "1234"));
}
public static String interleave(String you, String me)
{
if (you.length() == 0) return me;
else if (me.length() == 0) return you;
return you.substring(0,1) + interleave(me, you.substring(1));
}
}
输出:a1b2c3d4efg
答案 0 :(得分:1)
好吧,如果你真的不想使用子串,你可以使用String的toCharArray()方法,然后你可以使用StringBuilder来附加字符。通过这个,你可以循环遍历每个数组的索引。
这样做,结果就是:
public static String interleave(String you, String me) {
char[] a = you.toCharArray();
char[] b = me.toCharArray();
StringBuilder out = new StringBuilder();
int maxLength = Math.max(a.length, b.length);
for( int i = 0; i < maxLength; i++ ) {
if( i < a.length ) out.append(a[i]);
if( i < b.length ) out.append(b[i]);
}
return out.toString();
}
尽管如此,您的代码仍然足够高效。如果你真的想避免子串,这可以是另一种选择。
答案 1 :(得分:1)
这是一个循环实现(不处理空值,只是为了显示逻辑):
public static String interleave(String you, String me) {
StringBuilder result = new StringBuilder();
for (int i = 0 ; i < Math.max(you.length(), me.length()) ; i++) {
if (i < you.length()) {
result.append(you.charAt(i)); }
if (i < me.length()) {
result.append(me.charAt(i));
}
}
return result.toString();
}
答案 2 :(得分:0)
我建议的解决方案是基于预期的输出 - 在您的特定情况下考虑使用String的split方法,因为您在字符上交叉。
所以做这样的事情,
String[] xs = "abcdefg".split("");
String[] ys = "1234".split("");
现在遍历较大的数组并确保交错,确保在访问之前对较小的数组执行长度检查。
答案 3 :(得分:0)
要将其作为一个循环来实现,你必须保持位置并继续添加,直到一个完成然后开始其余部分。任何更大的字符串都应该使用StringBuilder。像这样(未经测试):
int i = 0;
String result = "";
while(i <= you.length() && i <= me.length())
{
result += you.charAt(i) + me.charAt(i);
i++;
}
if(i == you.length())
result += me.substring(i);
else
result += you.substring(i);
答案 4 :(得分:0)
改进(在某种意义上)@BenjaminBoutier回答。
StringBuilder是连接字符串的最有效方法。
public static String interleave(String you, String me) {
StringBuilder result = new StringBuilder();
int min = Math.min(you.length(), me.length());
String longest = you.length() > me.length() ? you : me;
int i = 0;
while (i < min) { // mix characters
result.append(you.charAt(i));
result.append(me.charAt(i));
i++;
}
while (i < longest.length()) { // add the leading characters of longest
result.append(longest.charAt(i));
i++;
}
return result.toString();
}