我被一个(可能非常简单)的想法难住了。我正在使用 BufferedReader 读取文本文件,并在空格处分割字符串。我需要创建一个新的字符串数组,并将前一个数组中的新元素以 3 秒为单位进行分组,例如{快速的棕色狐狸跳过了懒猫}
⇒ {快速的棕色狐狸跳过了懒猫}
。 p>
到目前为止,我提出了一种非常低效的尝试,即迭代数组并将元素和空格连接到新的字符串数组。它还会在新数组中留下空值,因为我每次都会递增 i+3
。
String line = "";
while ((line = br.readLine()) != null) {
String words[] = line.split(" ");
String[] result = new String[words.length - 1];
for (int i = 0; i < words.length - 3; i += 3) {
result[i] = words[i] + " " + words[i + 1] + " " + words[i + 2];
}
for (int i = 0; i < result.length; i++) {
System.out.println(result[i]);
}
}
输出示例:
a Goose who null null was taking a null null walk by the null null side of the null null "Good heavens!" cried null null the Goose.
最佳答案
你的 friend 是:
演示:
import java.util.Arrays;
class Main {
public static void main(String[] args) {
final int SIZE = 3;
String[] arr = { "The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "cat", "Hello" };
String[] result = new String[(int) Math.ceil((double) arr.length / SIZE)];
for (int i = 0, j = 0; i < arr.length; i += SIZE, j++) {
result[j] = String.join(" ", Arrays.copyOfRange(arr, i, Integer.min(arr.length, i + SIZE)));
}
System.out.println(Arrays.toString(result));
}
}
输出:
[The quick brown, fox jumped over, the lazy cat, Hello]
它是如何工作的
Arrays.copyOfRange
将 arr
从索引 i
复制到索引 Integer.min(arr.length, i + SIZE) - 1
其中 Integer.min(arr.length, i + SIZE)
返回 arr.length
和 i + SIZE 中的最小值
。这对于最后一个副本是必需的,因为 i + SIZE
可能会超出 arr.length
导致 IndexOutOfBoundsException
。下面给出了 arr
和 SIZE = 3
中 10
元素的示例:
当 i = 0 时, Arrays.copyOfRange(arr, 0, Integer.min(10, 0 + 3))
=> Arrays.copyOfRange(arr, 0, 3)
将从索引 0
到索引 2
的 arr
中返回子数组。
当 i = 3 时, Arrays.copyOfRange(arr, 3, Integer.min(10, 3 + 3))
=> Arrays.copyOfRange(arr, 3, 6)
将从索引 3
到索引 5
的 arr
中返回子数组。
当 i = 6 时, Arrays.copyOfRange(arr, 6, Integer.min(10, 6 + 3))
=> Arrays.copyOfRange(arr, 6, 9)
将从索引 6
到索引 8
的 arr
中返回子数组。
当 i = 9 时, Arrays.copyOfRange(arr, 9, Integer.min(10, 9 + 3))
=> Arrays.copyOfRange(arr, 9, 10)
将从索引 9
到索引 9
的 arr
中返回子数组。
关于java - 如何在每个第 n 个单词处拆分字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65260199/