【问题标题】:Printing on next line every time char is reached每次达到 char 时在下一行打印
【发布时间】:2017-05-10 13:59:35
【问题描述】:

在我的代码中,我首先将两个字符串数组添加到字符串数组列表中。在我的 toString() 方法中,我想打印 arrayList 以便每次到达 char ',' 时,我们都会在下一行(连续)打印下一个数组。但是通过这段代码,我得到了第一个数组的一行和第二个数组的一列。我在这里做错了什么?

代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class PrintList {
    static String[] data = {"cat","dog"," ","hen",","};
    static String[] data2 = {"ttt","yyy","ggg","ddd", ","};
    static ArrayList <String> list = new ArrayList<>();
    public static void main(String[] args) {
        dataRecord();
        System.out.print(listToString(list));
    }

    public static void dataRecord () {
        list.addAll(Arrays.asList(data));
        list.addAll(Arrays.asList(data2));

    }
    public static String listToString (List <?> list) {
        String result = "";
        for (int i = 0; i < list.size(); i++) {
           result += "      " + list.get(i);
           if (result.indexOf(',') >= 0) {
              result = result + System.lineSeparator();
           }
        }
        return result;
    } 
}

【问题讨论】:

  • 附带说明,不要在循环内连接字符串,使用 StringBuilder 会更节省内存。

标签: java arrays


【解决方案1】:

只需在以下情况下更改:

if (result.indexOf(',') >= 0) 

对于这个:

if (list.get(i).indexOf(',') >= 0) 

问题是您总是在查看结果变量。当第一个 ',' 出现时,结果将始终包含 ','。

【讨论】:

    【解决方案2】:

    那是一些奇怪的代码,但我认为这是一个学习练习,所以我想这很好。您的问题是,一旦您的结果字符串包含逗号,您每次添加新元素时都会添加行分隔符。

    示例:假设您的列表包含"a", "b", ",", "c", "d"

    现在你迭代并将元素添加到一个字符串中,然后看起来像这样:

    • 你添加"a",字符串看起来像"a"
    • 你添加"b",字符串看起来像"a b"
    • 您添加",",字符串看起来像"a b ,",现在您的字符串第一次包含逗号,所以您添加行分隔符,因此字符串看起来像"a b ,\n"
    • 你添加"c",字符串看起来像"a b ,\n c"。因为你的字符串中还有一个逗号,所以添加了另一个行分隔符,字符串是"a b ,\n c\n"
    • 你添加"d",字符串看起来像"a b ,\n c\n d"。因为你的字符串中还有一个逗号,所以添加了另一个行分隔符,字符串是"a b ,\n c\n d\n"

    要解决这个问题,您有多种可能性:

    • 检查刚刚添加的元素是逗号还是包含逗号。如果是这样,请添加行分隔符(并且可能不添加元素)
    • 添加元素而不进行任何检查并替换末尾的逗号(在循环之后),例如通过result = result.replace(",", ",\n");

    【讨论】:

    • 感谢您的回答!什么是“不那么奇怪”的代码,因为它是一个学习练习。谢谢
    • @hozan 好吧,将逗号添加到列表中,然后将其全部连接成一个字符串,然后用其他东西替换逗号并不是您在生产中使用的那种代码: ) 此外,您可能会在dataRecord() 中创建一个静态列表,而不是保留一个静态列表(顺便说一句,该名称不是很有描述性)并从该方法返回它。这只是两件事,还有更多,但触摸它们都超出了 SO 的范围,通常你会在获得经验时得到这些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2015-03-06
    • 2021-11-01
    相关资源
    最近更新 更多