0

我有以下字符串:

String a = "ABC";
String b = "BCD";
String c = "CDE";
...

有人可以告诉我如何实现这样的目标吗?

String result = "
A, B, C\n
B, C, D\n
C, D, E\n
";

我用不同的方式尝试过,但没有一个是通用的和无错误的。

一个例子:

String a = "ABC";
String b = "BCD";
String c = "CDE";
String result = "";
int length = 3;
for(int i = 0; i < length; i++) {
    result += a.substring(i, i+1);
    result += ", ";
    result += b.substring(i, i+1);
    result += ", ";
    result += c.substring(i, i+1);
    result += "\n";
}

它有效,但它很丑,因为我真的不知道我有多少“列”。我的意思是它只能是 a,b,c 或更多 d,e,f,g,h... 而且字符串的长度可以不同,3 只是一个例子。

4

5 回答 5

1

尝试这个。

public static void main(String[] args) {
    String a = "ABC";
    String b = "BCD";
    String c = "CDE";

    String result = Stream.of(a, b, c)
        .map(s -> String.join(", ", s.split("")) + "\n")
        .collect(Collectors.joining());

    System.out.println(result);
}

输出:

A, B, C
B, C, D
C, D, E
于 2021-11-10T09:41:19.807 回答
0

在 Java 15 中,有文本块:

String example = """
    Hello,
        world.
""";

但是在该版本之前,您会遇到某种形式的串联。好消息是编译器会为你把文字和常量连接在一起:

String result = "A, B, C\n"
              + "B, C, D\n"
              + "C, D, E\n"; 
于 2021-11-10T08:14:34.630 回答
0

您好,这段代码运行良好;

public static void main(String[] args) {
    String a = "ABC";
    String b = "BCD";
    String c = "CDE";
    String result = "";
    
    result = parseSpecialString(a, b, c);
    
    System.out.println(result);
}

/**
 * @param strArr is any size str arguments
 * @return example : A, B, C
    B, C, D
    C, D, E
 */
static String parseSpecialString(String ...strArr){
    StringBuilder sb = new StringBuilder();
    
    String NEW_LINE = "\n";

    for (String str : strArr) {
        sb.append(convertCsvStr(str)).append(NEW_LINE);
    }
    
    return sb.toString();
}

//convert ABC -> A, B, C
static String convertCsvStr(String str){
    StringBuilder sb = new StringBuilder();
    
    final String COMMA = ", ";
    
    String[] strArr = str.split("");
    
    //strArr is {"", "A", "B", "C"}, so start index 1
    for (int i = 1; i< strArr.length ; i++) {
        
        sb.append(strArr[i]);
        
        //add comma until last item
        if(i != strArr.length -1){
            sb.append(COMMA);
        }
    }
    return sb.toString() ;
}
于 2021-11-10T08:43:19.590 回答
0

如果您可以在一个类中预先定义任意数量的字符串,

class MyClass {
    String a = "ABC";
    String b = "BCD";
    String c = "CDE";
}

然后您可以检索所有类变量并使用反射遍历它们,如下所示:

MyClass myClass = new MyClass();

Field[] fields = myClass.getClass().getDeclaredFields();
for (Field field : fields) {
    System.out.println(String.join(", ", field.get(myClass).toString().split("")));
}

控制台输出:

A、B、C
B、C、D
C、D、E


有关反射的更多信息,请参阅Java 反射指南

于 2021-11-10T08:54:56.117 回答
0

String::replaceAll可用于在每个字母/数字后添加一个带空格的逗号,最后一个字符除外。

然后可以使用 连接字符串Collectors.joining("\n")

String a = "ABC", b = "CDE", c = "EFG";

String result = Stream.of(a, b, c)
    .map(s -> s.replaceAll("(\\w)(?!$)", "$1, "))
    .collect(Collectors.joining("\n"));
System.out.println(result);

输出:

A, B, C
C, D, E
E, F, G

在此任务中无需将每个字符串拆分为许多子字符串。

于 2021-11-11T00:27:49.880 回答