【问题标题】:How to randomly access nth element in StringTokenizer如何在 StringTokenizer 中随机访问第 n 个元素
【发布时间】:2011-11-15 14:32:45
【问题描述】:

我们是否可以直接访问 stringTokenizer 中的某个(比如说第 20 个)元素。时不时只需要其中的某个元素,不需要其他元素,但我必须遍历所有元素。

编辑:我也想忽略空元素。

我错过了什么吗?

【问题讨论】:

    标签: java string stringtokenizer string-split


    【解决方案1】:

    您可以使用String.split 代替Tokenizer

    例如:

    String[] split = "you string is splitting".split(" ");
    split[2];  // random access to the 3rd element of split    
    

    当然,在访问其子索引之前,您需要检查您的 split 是否确实有这么多元素。

    【讨论】:

    • 它可以在多个不同的分隔符处拆分吗?
    • 可以忽略空元素吗?
    • 是的,你可以在任何你想要的正则表达式中分割。这会给你很大的灵活性。
    • @SyedAqeel 基本上是的,例如,您可以拆分,;,意思是"a,b;c" 将导致["a","b","c"]
    【解决方案2】:

    您可以尝试 Apache Commons Lang 的 StringUtils 类,它可以拆分字符串,同时忽略空元素并为您处理 null 字符串。

    分词器必须至少读取 n 个令牌才能确定哪个是第 n 个。因此,使用String#split()StringUtils.split(...) 创建一个字符串数组可能会更容易。

    请注意,我更喜欢StringUtils.split(...),因为如果我不想要它们,它不会返回空元素,即StringUtils.split(",a,b,c;;d,e,,f",";,"); 将返回["a","b","c","d","e","f"]String#split() 将返回["","a","b","c","","d","e","","f"]

    【讨论】:

      【解决方案3】:

      Tokenizer 旨在按顺序访问元素(有点像LinkedList)。您必须遍历所有令牌并将它们存储在某种随机访问集合 (ArrayList) 中,或使用其他方法拆分原始字符串/流。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-08
        • 1970-01-01
        相关资源
        最近更新 更多