有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java如何将字符串数组中的所有字符合并为新字符串?

我正在制定一个方法

public static String merge(String... s)

这是输入:

String a = merge("AM ","L","GEDS","ORATKRR","","R TRTE","IO","TGAUU");
System.out.println(a);

预期产出:

ALGORITMER OG DATASTRUKTURER

我多次尝试运行一个循环,以便它拾取s[0]。字符(索引)并将其附加到字符串以供输出。我遇到的问题是,当我尝试运行s[1]的循环时。charAt(1)它为null,我希望它不获取StringIndexOutOfBoundsException,而是继续执行s[2]并附加[2]。字符到字符串

我该怎么办


共 (3) 个答案

  1. # 1 楼答案

    下面的代码满足您的需要。它适用于任意数量的字符串,因为它使用varargs(三个点),允许您将任意数量的字符串传递到merge

    使用getLongest()查找最长字符串的长度

    static int getLongest(String... strings) {
        int len = 0;
        for(String str : strings) {
            if(str.length() > len) {
                len = str.length();
            }
        }
        return len;
    }
    

    然后将每个String中的所有第i个字符合并成一个StringBuilder

    static String merge(String ...strings) {
    
        int longest = getLongest(strings);
    
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < longest; i++) {
            for(String str : strings) {
                if(i < str.length()) {
                    sb.append(str.charAt(i));
                }
            }
        }
        return sb.toString();
    }
    
    public static void main(String[] args) {
    
    String a = merge("AM ","L","GEDS","ORATKRR","","R TRTE","IO","TGAUU"); 
    System.out.println(a);      
    }
    

    输出

    ALGORITMER OG DATASTRUKTURER
    
  2. # 2 楼答案

    首先,你需要一个方法来获得最长的String,比如-

    private static String getLongestString(String... arr) {
        String str = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i].length() > str.length()) {
                str = arr[i];
            }
        }
        return str;
    }
    

    然后可以在merge()中编写一个嵌套循环,类似于-

    public static String merge(String... stringArray) {
        StringBuilder sb = new StringBuilder();
        int pos = 0;
        int len = getLongestString(stringArray).length();
        while (pos < len) {
            for (String str : stringArray) {
                if (str.length() > pos) {
                    sb.append(str.charAt(pos));
                }
            }
            pos++;
        }
        return sb.toString();
    }
    

    那你可以叫它-

    public static void main(String[] args) {
        String a = merge("AM ", "L", "GEDS", "ORATKRR", "", "R TRTE", "IO",
                "TGAUU");
        System.out.println(a);
    }
    

    输出是(请求的)——

    ALGORITMER OG DATASTRUKTURER
    
  3. # 3 楼答案

    在尝试访问每个字符串的第i个字符之前,需要检查其长度:

    StringBuilder sb = new StringBuilder();
    int index = 0;
    boolean maxLengthReached = false;
    while (!maxLengthReached) {
        maxLengthReached = true;
        for (String str : input) {
            if (index < str.length) {
                sb.append(str.charAt(index));
                maxLengthReached = false;
            }
        }
        index++;
    }
    
    return sb.toString();
    

    为了澄清,我使用了一个布尔maxLengthReached来确定最长String的最后一个字符何时被追加到输出中。如果在输入数组中所有String的完整迭代中,我们没有找到足够长的String来拥有charAt(index),我们就知道我们完成了