在 Java 8 中逐行将 LinkedHashSet 附加到 TextArea
Append a LinkedHashSet to a TextArea line by line in Java 8
我正在尝试将 LinkedHashSet 附加到 java 中的文本区域 8。下面的代码有效,但它不会逐行添加内容,而是将它们全部添加到一行中。
Code:
textArea.setText(textArea.getText() + linkedHashSet);
[ lin1, line2, line3, line4]
我希望将它们附加到下面列出的 textArea
line1
line2
line3
line4
因为这是Java8,你可以使用:
textArea.setText( textArea.getText()
+ String.join( System.lineSeparator(), linkedHashSet ));
String.join
的各种形式,这个 accepting a delimiter and an Iterable
,让您可以使用分隔符将元素的字符串表示形式连接在一起 - 在本例中是行分隔符。
通常,如果您的 Iterable
(集合、列表)包含元素 "A"、"B" 和 "C",并且您想将它们与 [=18= 连接起来],你使用:
String.join( ",", myIterable );
这会给你:
A,B,C
如果第一个参数是---BIG DELIMITER---
,那么你会得到:
A---BIG DELIMITER---B---BIG DELIMITER---C
但在我们的例子中,我们放入 System.lineSeparator()
,这意味着您的字符串将由 \n
(在 Linux 机器上)或 \r\n
分隔(在 Windows 机器上)。这意味着每个值都在单独的一行上:
A
B
C
您首先必须了解您的代码实际上做了什么。我在此解释中假设 lnkedHashSet 是 String 对象的 LinkedHashSet。
- textArea.getText() 被调用以获取当前文本区域值
调用 - linkedHashSet.toString() 以生成 linkedHashSet 的文本版本。该方法 returns 一个包含方括号的字符串、linkedHashSet 中以逗号分隔的字符串列表和最后一个方括号。
- 文本区域值和哈希集字符串连接成一个字符串
- textArea.setText(String) 将文本区域设置为新的单个字符串
所以问题是 linkedHashSet.toString() 不知道您想要在每个值之后添加 EOL,并且没有办法让它这样做。
您可以执行以下操作(适用于任何 Java 版本 >= 5):
StringBuilder sb = new StringBuilder;
for (String item : linkedHashSet) {
sb.append(item).append('\n');
}
textArea.setText(sb.toString());
我正在尝试将 LinkedHashSet 附加到 java 中的文本区域 8。下面的代码有效,但它不会逐行添加内容,而是将它们全部添加到一行中。
Code:
textArea.setText(textArea.getText() + linkedHashSet);
[ lin1, line2, line3, line4]
我希望将它们附加到下面列出的 textArea
line1
line2
line3
line4
因为这是Java8,你可以使用:
textArea.setText( textArea.getText()
+ String.join( System.lineSeparator(), linkedHashSet ));
String.join
的各种形式,这个 accepting a delimiter and an Iterable
,让您可以使用分隔符将元素的字符串表示形式连接在一起 - 在本例中是行分隔符。
通常,如果您的 Iterable
(集合、列表)包含元素 "A"、"B" 和 "C",并且您想将它们与 [=18= 连接起来],你使用:
String.join( ",", myIterable );
这会给你:
A,B,C
如果第一个参数是---BIG DELIMITER---
,那么你会得到:
A---BIG DELIMITER---B---BIG DELIMITER---C
但在我们的例子中,我们放入 System.lineSeparator()
,这意味着您的字符串将由 \n
(在 Linux 机器上)或 \r\n
分隔(在 Windows 机器上)。这意味着每个值都在单独的一行上:
A
B
C
您首先必须了解您的代码实际上做了什么。我在此解释中假设 lnkedHashSet 是 String 对象的 LinkedHashSet。
- textArea.getText() 被调用以获取当前文本区域值 调用
- linkedHashSet.toString() 以生成 linkedHashSet 的文本版本。该方法 returns 一个包含方括号的字符串、linkedHashSet 中以逗号分隔的字符串列表和最后一个方括号。
- 文本区域值和哈希集字符串连接成一个字符串
- textArea.setText(String) 将文本区域设置为新的单个字符串
所以问题是 linkedHashSet.toString() 不知道您想要在每个值之后添加 EOL,并且没有办法让它这样做。
您可以执行以下操作(适用于任何 Java 版本 >= 5):
StringBuilder sb = new StringBuilder;
for (String item : linkedHashSet) {
sb.append(item).append('\n');
}
textArea.setText(sb.toString());