Java 如何拆分数组列表并设置在单独的字符串或数组中

Java How to split arralyist and set in a separate string or array

我是 Java 的新人。我有一个包含以下数据的对象

1002,USD,03/09/2019,1004,2,cref,,,,,,,,,
1002,USD,03/09/2019,1005,3,cref,,,,,,,,,
1002,USD,03/09/2019,1003,3,cref,,,,,,,,,

我使用 StringTokenizer 在 arraylist 中转换它

List<String> elements = new ArrayList<String>();
StringTokenizer st = new StringTokenizer((String) object);

while(st.hasMoreTokens()) {
    elements.add(st.nextToken());
}

分词器将其转换为以下形式

[1002,USD,03/09/2019,1004,2,cref,,,,,,,,,, 
 1002,USD,03/09/2019,1005,3,cref,,,,,,,,,, 
 1002,USD,03/09/2019,1003,3,cref,,,,,,,,,]

我希望每行的第三个索引 (1004,1005,1003) 在单独的字符串或单独的数组中。 请告知或有没有其他方法可以在不使用分词器的情况下获取第三个索引。

java version "1.8.0_161" Java(TM) SE Runtime Environment (build 1.8.0_161-b12) Java HotSpot( TM) 64 位服务器 VM(内部版本 25.161-b12,混合模式)

如果您知道您的单独元素总是出现在第 3 个索引处,那么只需数数即可。

List<String> elements = new ArrayList<String>();
StringTokenizer st = new StringTokenizer((String) object);
List<String> separateList = new ArrayList<>();    // the list where you put your separate tokens. 

int index=0;                       // start an index counter (at 0)
while(st.hasMoreTokens()) {
   String token = st.nextToken();  // your token in a separat variable
   elements.add(token);            // adds every token to your list
   if(index==3){                   // once your index reaches 3 (4th element) 
      index=0;                     // reset the index to 0
      separateListe.add(token);    // and add the token to the separate list
   }else{
      index++;                     // for every other index, just count (index +1)
   }
}

一般来说,把所有东西都放在真实的地方总是更容易 "Lists"(不是数组,它们太死板而且在字符串中它们表现不佳)。这样你就可以处理你的数据并在你的数据处理完成后将它转换成你想要的任何东西。

要从每一行中获取所需的值(第 4 项),您可以使用 String.split() 函数:

List<String> elements = new ArrayList<String>();
StringTokenizer st = new StringTokenizer((String) object);

while(st.hasMoreTokens()) {
    String[] row = st.nextToken().split(",");
    if (row.length > 3) {
        elements.add(row[3]);
    }
}

您可以使用模块遍历 elements 列表并每次查看等于 0 的列表:

对于rank作为列表中元素的索引

rank % 3 = 0
String text = "yourtext";
String[] lines = text.split("\r?\n");
List<String> elements = new ArrayList<String>();

for(String line:lines) {
  String[] words = line.split(",");
  elements.add(words[3]);
}

对于较短的版本,您还可以使用 Streams:

  1. 创建两个额外的 ArrayList 来缓冲数据

    List<String> listToStoreData = new ArrayList<String>();
    List<String[]> second = new ArrayList<String[]>();
    
  2. 将每个元素按','分割成一个数组并将它们添加到'second' ArrayList

    elements.stream().forEach(e ->  second.add(e.toString().split(",")));
    
  3. 对'second'的每个元素,将数组第三个位置的数据压入'listToStoreData'ArrayList

    second.stream().forEach(s -> listToStoreData.add(s[3]));
    
  4. 下一步将列表转换为字符串并将字符串存储到变量

    String data = listToStoreData.toString();
    

数据输出 = [1004, 1005, 1003]