将两个 textArea 按特定顺序合并为一个
merge two textArea into one with specific order
我使用这些数组从 textArea 中获取文本
array1 = textArea1.getText().split("\r?\n");
array2 = textArea2.getText().split("\r?\n");
我想以特定的方式将它们结合起来,并在 textArea3
中显示结果。例如,我想从 array1
中获取前六个元素,然后从 array2
中获取前六个元素,然后从 array1
中获取接下来的六个元素,依此类推...
我该如何实施?
您想创建一个双 for 循环。每次第一个 for 循环迭代时,第二个 for 循环将遍历 6 个元素。第一个 for 循环将使用 array1 并将其长度除以 6 以确定它应该迭代多少次。 (如果 array1 的长度为 12,则循环应循环 2 次)。在第二个 for 循环中还有一个检查 i 是否为偶数,因此它创建了一个交替模式:
编辑:您希望长度较大的数组成为第一个 for 循环中使用的数组,以确保所有元素都用于我使用 Math.max() 方法包含的两个数组中
String result = “”;
for(int i = 0; i < Math.ceil(Math.max(array1.length, array2.length)/6) ; i++) {
for(int j = i*6; j < i*6 + 6; j++) {
if(i % 2 == 0 && j < array1.length) //every time i is even (to ensure alternating pattern
result += array1[j];
else if(j < array2.length)
result += array2[j]; //making sure j is within length of array2
else
break; //j is out of bounds of both arrays, so break the loop
}
}
textArea3.setText(result);
如果有错误,请任何人检查这个循环
首先将数组转换为某种形式的 Collection
以使用其功能可能是最简单的。这是一种可能的方法,首先将它们转换为 ArrayList
,然后从 ArrayLists 中删除值以进行追加。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class GroupArraysTest {
public static void main(String[] args) {
String[] array1 = {"A", "bunch", "of", "values", "for", "testing", "purposes."};
String[] array2 = {"Even", "more", "values", "with", "more", "values", "than", "previous", "array", "for", "testing", "purposes."};
System.out.println(groupArrays(3, array1, array2));
}
public static String groupArrays(int wordCount, String[] array1, String[] array2) {
StringBuilder builder = new StringBuilder();
List<String> list1 = new ArrayList<>(Arrays.asList(array1));
List<String> list2 = new ArrayList<>(Arrays.asList(array2));
while(!list1.isEmpty() || !list2.isEmpty()) {
for(int i = 0; i < wordCount; i++) {
if(!list1.isEmpty())
builder.append(list1.remove(0)).append(" ");
else
break;
}
for(int i = 0; i < wordCount; i++) {
if(!list2.isEmpty())
builder.append(list2.remove(0)).append(" ");
else
break;
}
}
return builder.toString();
}
}
我使用这些数组从 textArea 中获取文本
array1 = textArea1.getText().split("\r?\n");
array2 = textArea2.getText().split("\r?\n");
我想以特定的方式将它们结合起来,并在 textArea3
中显示结果。例如,我想从 array1
中获取前六个元素,然后从 array2
中获取前六个元素,然后从 array1
中获取接下来的六个元素,依此类推...
我该如何实施?
您想创建一个双 for 循环。每次第一个 for 循环迭代时,第二个 for 循环将遍历 6 个元素。第一个 for 循环将使用 array1 并将其长度除以 6 以确定它应该迭代多少次。 (如果 array1 的长度为 12,则循环应循环 2 次)。在第二个 for 循环中还有一个检查 i 是否为偶数,因此它创建了一个交替模式:
编辑:您希望长度较大的数组成为第一个 for 循环中使用的数组,以确保所有元素都用于我使用 Math.max() 方法包含的两个数组中
String result = “”;
for(int i = 0; i < Math.ceil(Math.max(array1.length, array2.length)/6) ; i++) {
for(int j = i*6; j < i*6 + 6; j++) {
if(i % 2 == 0 && j < array1.length) //every time i is even (to ensure alternating pattern
result += array1[j];
else if(j < array2.length)
result += array2[j]; //making sure j is within length of array2
else
break; //j is out of bounds of both arrays, so break the loop
}
}
textArea3.setText(result);
如果有错误,请任何人检查这个循环
首先将数组转换为某种形式的 Collection
以使用其功能可能是最简单的。这是一种可能的方法,首先将它们转换为 ArrayList
,然后从 ArrayLists 中删除值以进行追加。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class GroupArraysTest {
public static void main(String[] args) {
String[] array1 = {"A", "bunch", "of", "values", "for", "testing", "purposes."};
String[] array2 = {"Even", "more", "values", "with", "more", "values", "than", "previous", "array", "for", "testing", "purposes."};
System.out.println(groupArrays(3, array1, array2));
}
public static String groupArrays(int wordCount, String[] array1, String[] array2) {
StringBuilder builder = new StringBuilder();
List<String> list1 = new ArrayList<>(Arrays.asList(array1));
List<String> list2 = new ArrayList<>(Arrays.asList(array2));
while(!list1.isEmpty() || !list2.isEmpty()) {
for(int i = 0; i < wordCount; i++) {
if(!list1.isEmpty())
builder.append(list1.remove(0)).append(" ");
else
break;
}
for(int i = 0; i < wordCount; i++) {
if(!list2.isEmpty())
builder.append(list2.remove(0)).append(" ");
else
break;
}
}
return builder.toString();
}
}