【问题标题】:how to combine or merge two strings in java? [duplicate]如何在java中合并或合并两个字符串? [复制]
【发布时间】:2017-08-12 20:07:24
【问题描述】:

下面是我的代码,我希望输出为 "afbgchde"not "abcdefgh" 但最终超出索引错误,希望有更好的方法来得到这个..请帮助..!!

String str1 = "abcde";
//char[] a = str1.toCharArray();
//System.out.println(a);
String str2 = "fgh";
char[] b = str2.toCharArray();
//System.out.println(b);
int i,j=0;
try
    {
        for(i=0;i<str1.length();i++)
        {
          char c = str1.charAt(i);
          System.out.print(c);
          if(j==i)
          { 
            char d = str2.charAt(j);
            System.out.print(d);
            j++;
          }
        }
    }
catch(Exception e)
{
    System.out.println(e);
}

【问题讨论】:

  • 错误在哪里,您做了什么来思考为什么会出现错误?
  • @JonSkeet 我知道错误是由于 str2 的索引值导致错误但不知道如何处理它..
  • 好好想想为什么你要求一个超出范围的值,以及你想要做什么。提示:如果你被要求合并“abcdefghijklmnopqrstuvwxyz”和“12”,你会在得到“c”之后继续吗?

标签: java string string-concatenation


【解决方案1】:

简单:

 char d = str2.charAt(j);
 System.out.print(d);
 j++;

您正在访问第二个字符串中的字符;但是你永远不会去检查j是否仍然是&lt; str2.length()

含义:i 的 for 循环包含该检查;并防止超出str 的长度......但是你忘记在你的其他字符串上这样做!因此,只有当 str 和 str2 恰好具有相同的大小时,您的合并才有效。

所以解决方案更像是:

 StringBuilder builder = new StringBuilder();
 int j = 0;
 for (int i=0; i < str.length(); i++) {
   builder.append(str.charAt(i));
   if (j < str2.length()) {
     builder.append(str2.charAt(j));  
     j++;
   }
 }
 // if str2 has more chars than str
 if (j < str2.length()) {
   // append ALL chars starting from index j
   builder.append(str2.substring(j));
 }
 String merged = builder.toString();

【讨论】:

  • 你的顺便说一句是错的,如果你看看他想做什么:他不想得到abcdefgh,而是afbgchde。所以他不想简单地连接它们,而是做另一个操作(如他的例子所示)
  • 谢谢,忽略了那部分。
  • @GhostCat 谢谢,当长度相等时,代码可以完美运行,否则会出错......如果你能提供更多细节,因为我刚刚开始学习 java,这将是有益的
  • 我更新了我的示例(没有编译/运行它;所以要注意一些细微的拼写错误)。希望对您有所帮助。
【解决方案2】:

好的。让我们试试这个

String str1 = "abcde";
String str2 = "fgh";
int bigLength = str1.length()>str2.length()?str1.length():str2.length();

for(int i = 0; i<bigLength; i++){
if(i<str1.length())
   System.out.print(str1.charAt(i))
if(i<str2.length())
   System.out.print(str2.charAt(i))
}

希望这对你有用。

【讨论】:

  • 我正在尝试获取 afbgchde 而不是 abcdefgh
  • 已修改。看看吧。
  • 这个成功了,谢谢..!!
  • 如果有效,您能否标记为正确答案?我希望你能。
【解决方案3】:

组合器的完整代码。

public class StringCombiner {
public static void main(String[] args){
    System.out.println(combine("Hello", "World"));
    System.out.println(combine("He", "World"));
    System.out.println(combine("Hello", "Wo"));
}

    public static String combine(String str1, String str2){
        StringBuilder output = new StringBuilder();
        int i =0;
        for(; i< str1.length(); ++i){
            output.append(str1.charAt(i));
            if(i < str2.length()){
                output.append(str2.charAt(i));
            }
        }
        if(i < str2.length()){
            for(; i<str2.length(); ++i){
                output.append(str2.charAt(i));
            }
        }
        return output.toString();
    }
    }

输出:

HWeolrllod
HWeorld
HWeollo

希望这会有所帮助。

【讨论】:

  • 我正在尝试获取 afbgchde
  • 嘿@RamrajSekar 首先误解了这个问题。现在添加了完整的代码。希望这会有所帮助!
【解决方案4】:

只需使用 StringBuilder 类人

如果你想改变一个字符串对象的值

String类是一个不可更改的对象,或者初始化时不能更改的对象

StringBuilder 类是您希望在应用程序运行时进行更改的任何字符串的最佳解决方案

例如添加字符串或更改字符串的值,甚至缩短字符串

这就是 StringBuilder 类的威力

`

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    相关资源
    最近更新 更多