【问题标题】:How to return Arrays.asList() in ordered list<String>?如何在有序列表<String> 中返回 Arrays.asList()?
【发布时间】:2013-04-25 09:46:58
【问题描述】:

我不知道这是否重复。如果是这样,请分享链接,因为我还没有找到任何人。 在我的 Java 程序中,我有一个类似以下的字符串(字符串是动态创建的)。

String header="Requirements ID,Requirements Number,Requirements Desc,Requirements Text,Requirements Date";

现在我正在创建一个列表

List<String> csv = new ArrayList<String>(); 
csv=Arrays.asList(header.split("\\s*,\\s*")); //splittng each phrase separated by comma

但我没有以无序的方式获得 List 值。我的意思是我得到这样的列表值

[Requirements Number,Requirements Date,Requirements Desc,Requirements ID,Requirements Text]

我知道列表是无序的。但我希望列表 csv 是这样的

[Requirements ID,Requirements Number,Requirements Desc,Requirements Text,Requirements Date]

所以我的问题是如何以有序的方式得到这个?任何可能的解决方案?

【问题讨论】:

  • 您要查找的排序的定义是什么?它似乎不是纯粹的字母/字典顺序,这将是“排序”的通常定义。
  • 非字母排序。看看字符串是怎样的。第一个是Requiremtns ID 但在我得到的列表中,第一个是Requirements Number。那么如何按照字符串值内容的确切顺序获取列表呢?
  • 当我运行你的代码时,我得到的输出是 [Requirements ID,Requirements Number,Requirements Desc,Requirements Text,Requirements Date] 你所期望的。
  • 但我不是那样的。
  • 所有实现List接口的东西都是有序的,包括ArrayList。您显示的代码示例应该可以工作。您的代码可能使用了一个名为“header”的不同变量,这会导致此错误。

标签: java arrays list arraylist


【解决方案1】:

最好的方法是使用StringTokenizer

1.) 使用StringTokenizer,用分隔符“,”分割字符串

2.) 迭代 StringTokenizer 并填充列表

3.) 现在在填充时,它会按顺序发生

伪代码类似于

String header="Requirements ID,Requirements Number,Requirements Desc,Requirements Text,Requirements Date";
StringTokenizer st = new StringTokenizer(header,",") ;
List<String> strList = new ArrayList<String>() ;
while (st.hasNextToken()) {
  strList.add(st.nextToken()) ;
}

【讨论】:

  • 我需要添加一个类似int count=0; strList.add(count,st.nextToken())的计数器并在while循环中增加count的值吗?
  • 不,没必要,while (st.hasNextToken()) 将循环直到最后一个令牌
  • @Shiju K Babu : 如果您觉得这个答案有用,请将其标记为正确答案 ;) :)
  • 在我的 eclispe 中,hasNextToken() 没有显示。我正在使用 java 6。hasMoreTokens() 好吗?
  • ya hasMoreTokens() 应该没问题。请参考docs.oracle.com/javase/1.5.0/docs/api/java/util/…
【解决方案2】:

使用 apache string utils 和 collections api:

http://commons.apache.org/proper/commons-lang//apidocs/org/apache/commons/lang3/StringUtils.html

    String header="Requirements ID,Requirements Number,Requirements Desc,Requirements Text,Requirements Date";
    List<String> list = Arrays.asList(StringUtils.split(header,","));
    Collections.sort(list);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2016-09-07
    • 2020-06-02
    • 2015-06-18
    • 2016-02-29
    相关资源
    最近更新 更多