属性文件中唯一的单词数

时间:2018-01-11 12:26:19

标签: java

在java(java 1.8)中计算属性文件(只是值)中唯一字数的最佳方法是什么 例如,条目可能是:

key1=This is my value for error {0}
key2=This is success message.Great.

输出应为10(包括{0})

我尝试了什么

property.load(in);

            Enumeration em = property.keys();
            while (em.hasMoreElements()) {
                String str = (String) em.nextElement();
                completeString =completeString+property.get(str);

            }
Set<String> myset=new HashSet<>();
        String s[]=completeString.split("[ .]");

        for(int i=1;i<s.length;i++){

                myset.add(s[i]);

         }

         for (String sss: myset){

            System.out.println(sss);

        }

的System.out.println(myset.size());

我们在java 1.8中有一个更简单的方法

1 个答案:

答案 0 :(得分:1)

使用的数据:

我使用了假人Properties

Properties prop = new Properties();
prop.put("A", "This is my value for error {0}");
prop.put("B", "This is success message.Great.");

旧的旧Java:

使用您使用的相同逻辑,您可以简单地在迭代中拆分每个属性的String

Set<String> set = new HashSet<>();

Enumeration em = property.keys();

while (em.hasMoreElements()) {
    String str = (String) em.nextElement();
    for(String s : str.split("[ .]")){
        set.add(s);
    }
}

在Java 8中 - 流API:

定义模式以拆分每个“单词”。

Pattern pattern = Pattern.compile("[ .]");

现在,首先让我们的Stream<String>获取我们的值。

您可以选择List<Object>

Stream<String> stream = 
    //Create a `List<Object>` from the enumeration and stream it
    Collections.list(prop.elements()).stream() 
        //Convert in String
        .map(o -> (String)o); 

Stream Map.Entry的{​​{1}}:

Properties

(不确定哪个更有效)

然后,您所要做的就是Stream<String> stream = prop.entrySet().stream() //Iterate the Map.Entry<Object,Object> .map(e -> (String)e.getValue()) flatMap将每个Stream拆分为新的String

Stream<String>

然后将 stream.flatMap(pattern::splitAsStream) //split based on the pattern define and return a new `Stream<String>` 收集到Stream

Set

结果将是一个很好的 .collect(Collectors.toSet()); //collect in a `Set<String>` 打印如下:

Set

摘要:

[Great, success, for, This, {0}, is, my, error, message, value]