1

我需要简单地包装长文本以将其显示在几行中。我尝试了默认代码段:

String s = "Español texto aquí";
StringBuilder sb = new StringBuilder(s);

int i = 0;
while (i + 20 < sb.length() && (i = sb.lastIndexOf(" ", i + 20)) != -1) {
sb.replace(i, i + 1, "\n");
}

System.out.println(sb.toString());

但是对于西班牙语文本,我在输出中得到错误的符号。如何换行非英文文本?

4

3 回答 3

5
String s = "Español texto aquí texto aquí Español texto aquí";
StringBuilder sb = new StringBuilder(s);

int i = 0;
while (i + 20 < sb.length() && (i = sb.lastIndexOf(" ", i + 20)) != -1) {
  sb.replace(i, i + 1, "\n");
}

System.out.println(sb.toString());

印刷

Español texto aquí
texto aquí Español
texto aquí

现在,我看不出有什么问题。

于 2012-06-25T20:47:19.277 回答
1

Java 拥有我见过的最好的 UTF-8 文本处理方法之一(它在内部使用 UTF-16)。

这里唯一依赖于操作系统或编码的是您正在使用的行分隔符。你可以试试

System.lineSeparator()  // Java 7 only

或者

System.getProperty("line.separator")

而不是\n.

如果这也无济于事,则问题可能出在您正在从中读取结果的控制台/终端中,而不是代码中。确保源 .java 文件保存为 UTF-8,尝试将输出重定向到文件而不是控制台。

于 2012-06-25T20:52:51.447 回答
0

有一个现成的解决方案。

https://mvnrepository.com/artifact/org.apache.commons/commons-text

String s = "Español texto aquí texto aquí Español texto aquí";
WordUtils.wrap(s, 20);
于 2022-01-30T18:42:34.103 回答