【问题标题】:Split a string in Java by symbols用符号分割Java中的字符串
【发布时间】:2017-03-29 17:13:33
【问题描述】:

请求很简单,但后来却发生了转折 基本上我需要的不仅仅是拆分一个字符串,而是保存“符号”,然后才能显示它们

它是这样工作的:

输入:

从前有一个王国很远很远

在这个王国住着一位公主

她一个人很开心

输出:

一次,1次,第1行-第1列

在,1 次,第 1 行 - 第 6 列

a,3次,第1行-第11列,第1行-第28列,第2行-第23列

...

还应该能够:不考虑空格,\n 和 \f 在它们上,但就像考虑“,”一样,用空格分隔不会将“远”和“远”作为不同的符号,就像“,”本身就是一个符号

有没有什么方法可以让 split 方法考虑多个参数? 更不用说我不确定是否有比 for 循环更好的方法来计算每个“符号”重复的行和列

【问题讨论】:

标签: java split


【解决方案1】:

将字符串拆分为符号,将符号作为键保存在哈希映射中,并在相应的哈希映射值中计数。

例子:

Map<String, Integer> tokensWithCounts = new HashMap<String, Integer>();
String[] tokens = str.split("\\s*[a-zA-Z]+\\s*");
List<String> tokensList = Arrays.asList(tokens);
for(String token : tokenList){
    if(tokensWithCounts.get(token) == null){
        tokensWithCounts.put(token, 0);
    }
    tokensWithCounts.put(token, tokensWithCounts.get(token) + 1);
}

编辑:对不起,我的问题错了。您将把这些值保存在HashMap&lt;String, List&lt;String&gt;&gt; 中。令牌仍然是键,List 将以“第 1 行-第 1 列”的形式包含所有出现的令牌。出现次数是存储在 HashMap 中的 List&lt;String&gt; 中的 .size()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 2011-08-09
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多