2016-05-31 219 views
-3

我遇到了從包含特殊字符(例如$ @%!)的文件中讀取的情況!以及空間。例如:java - 在輸出中打印特殊字符和空格

I_am_here !!!真的,__ am_I_here?

在上面的字符串中,我使用下劃線顯示一個空格,以表明我可以碰到多個空格(如前兩個)以及特殊字符。所以我只是使用_作爲視覺輔助。在真正的文件中,它實際上是一個空格或多個空格。

如何從輸入中讀取此文件並跟蹤它們。是否可以隔離特殊字符和空格,並將它們與讀取的單詞一起打印到輸出中。我想總之,我想保留特殊字符和空格,同時修改程序讀取的文字。

例如輸入字符串:

I_am_here!真的,__ am_I_here?

將成爲:

I_am_here!真的,__ 2_I_2?

這裏我正在讀取輸入字符串,計算多次出現的單詞並輸出輸出以及原始輸入中出現的空格和特殊字符。我怎樣才能在Java中做到這一點?謝謝

+1

請問你編寫的代碼是什麼樣子? –

+1

你有沒有嘗試過從文件讀取和使用正則表達式?顯示你迄今爲止所做的事情會更好。 – jcool

+0

*「我如何從輸入中讀取此文件?」*與通常閱讀文本文件的方式相同:使用['FileReader'](https://docs.oracle.com/javase/7/docs/api/java/ io/FileReader.html),也許用['BufferedReader'](https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html)包裝以便使用[''的readLine()'](https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine%28%29)。 – Andreas

回答

0

要找到字符串中的單詞,最簡單的方法是使用正則表達式。正則表達式\p{L}+將查找一個或多個Unicode字母的任何序列。

要與不知道,直到這個詞已經發現,可以使用MatcherappendReplacement()appendTail()方法用於查找單詞的值替換這樣的字眼。

由於您想要統計一個單詞以前看過多少次,因此您可以使用Map<String, Integer>來維護一個已經看到的單詞地圖,以及迄今爲止看過多少單詞的次數。

這是它如何工作的:

String input = "I am here!!! really, am I here? Why, yes I really am!"; 

Map<String, Integer> wordCount = new HashMap<>(); 
StringBuffer buf = new StringBuffer(); 
Matcher m = Pattern.compile("\\p{L}+").matcher(input); 
while (m.find()) { 
    String word = m.group(); 
    Integer count = wordCount.get(word); 
    if (count == null) 
     wordCount.put(word, 1); 
    else { 
     wordCount.put(word, ++count); 
     m.appendReplacement(buf, count.toString()); 
    } 
} 
String output = m.appendTail(buf).toString(); 

System.out.println(input); 
System.out.println(output); 

輸出

I am here!!! really, am I here? Why, yes I really am! 
I am here!!! really, 2 2 2? Why, yes 3 2 3!