Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 组合字符串-相同字符的运行保持在一起_Java_Eclipse_String - Fatal编程技术网

Java 组合字符串-相同字符的运行保持在一起

Java 组合字符串-相同字符的运行保持在一起,java,eclipse,string,Java,Eclipse,String,我正在创建一个代码,它将两个给定字符串组合在一起,并通过交替两个字符串中的字符来获得一个字符串。 例如:“xyz”和“abc”将得到“xaybzc” 我遇到的问题是,对于相同角色的任何运行,这些角色都应该保持在一起。 例如:“abc”和“xyyz”将得到“AXBYCZ” 这是我写的: public static java.lang.String interleaveWithRuns(java.lang.String s, java.lang.String t) { String s

我正在创建一个代码,它将两个给定字符串组合在一起,并通过交替两个字符串中的字符来获得一个字符串。 例如:“xyz”和“abc”将得到“xaybzc”

我遇到的问题是,对于相同角色的任何运行,这些角色都应该保持在一起。 例如:“abc”和“xyyz”将得到“AXBYCZ”

这是我写的:

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;
}

对于这个特殊的问题,您应该对这两个字符串的迭代器进行不同的跟踪。因此,这不能由单个迭代器变量
i
完成。字符串
s
需要
i
,字符串
t
需要
j

另外,为了避免遇到数组越界错误,特别是当同一个字符位于任何字符串的末尾时,在两个字符串的if条件中都添加了短路条件。这样:
(i
下面是对
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;
}
public static java.lang.String interleaveWithRuns(java.lang.String s,
java.lang.String(t){
字符串str=“”;
int i=0;
int j=0;
而(i

希望这能有所帮助。

对于这个特殊的问题,您应该以不同的方式跟踪这两个字符串的迭代器。因此,这不能由单个迭代器变量
i
完成。字符串
s
需要
i
,字符串
t
需要
j

另外,为了避免遇到数组越界错误,特别是当同一个字符位于任何字符串的末尾时,在两个字符串的if条件中都添加了短路条件。这样:
(i
下面是对
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;
}
public static java.lang.String interleaveWithRuns(java.lang.String s,
java.lang.String(t){
字符串str=“”;
int i=0;
int j=0;
而(i

希望这能有所帮助。

如果在检查
(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()));
}
公共静态字符串concat(字符串a、字符串b)
{
如果(a.长度()==0){
返回b;
}
如果(b.长度()==0){
返回a;
}
字符串a1=“”+a.charAt(0);
int i=1;
而(i
如果在检查
(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()));
}
公共静态字符串concat(字符串a、字符串b)
{
如果(a.长度()==0){
返回b;
}
如果(b.长度()==0){
返回a;
}
字符串a1=“”+a.charAt(0);
int i=1;
而(i