java文本處理之計(jì)算文本句子數(shù)
本文實(shí)例為大家分享了java計(jì)算文本句子數(shù)的具體代碼,供大家參考,具體內(nèi)容如下
1、任務(wù)簡(jiǎn)介
本節(jié)任務(wù)是計(jì)算文本中的句子數(shù),并且對(duì)于句子數(shù)的劃分標(biāo)準(zhǔn)為“?!?“!”和“?”三種符號(hào)。
2、基本任務(wù)和代碼
1)具體思路
(1)首先需要使用InputStreamReader類和BufferedReader類實(shí)現(xiàn)文本的讀取,由于我使用的文本文檔均為utf-8編碼,所以還需要指定編碼格式為utf-8;
(2)然后需要定義一個(gè)空的字符串變量,在對(duì)文本逐行讀出后將讀出的內(nèi)容追加到該空字符串后;
(3)逐行讀出文檔,然后使用for循環(huán)對(duì)該行中的每一個(gè)字符進(jìn)行遍歷,使用toString()方法得到每一個(gè)字符,再使用if語句和equals()方法字符是否為“。” “!”和“?”三種符號(hào)之一,若為其中之一則句子數(shù)+1;
(4)將計(jì)算得出的句子長(zhǎng)度打印出來;
2)任務(wù)代碼
程序保存為juzi1.java,代碼如下:
import java.io.*;//導(dǎo)入java.io包中的所有類 import java.util.Scanner;//導(dǎo)入java.util包中的Scanner類 public class juzi1 {//類名 public static void main(String[] args) {//程序主函數(shù) try {//try代碼塊,當(dāng)發(fā)生異常時(shí)會(huì)轉(zhuǎn)到catch代碼塊中 //讀取指定的文件 Scanner s = new Scanner(System.in);//創(chuàng)建scanner,控制臺(tái)會(huì)一直等待輸入,直到敲回車結(jié)束 System.out.println("請(qǐng)輸入想要打開的文本文檔:");//輸入提示信息 String a = s.nextLine();//定義字符串變量,并賦值為用戶輸入的信息 //創(chuàng)建類進(jìn)行文件的讀取,并指定編碼格式為utf-8 InputStreamReader read = new InputStreamReader(new FileInputStream(a),"utf-8"); BufferedReader in = new BufferedReader(read);//可用于讀取指定文件 StringBuffer b = new StringBuffer();//定義一個(gè)字符串變量b,便于后續(xù)進(jìn)行內(nèi)容追加的操作 String str = null;//定義一個(gè)字符串類型變量str String d = null;//定義一個(gè)字符串類型變量c int e = 0;//定義一個(gè)int型變量,用于統(tǒng)計(jì)句子數(shù) while((str = in.readLine()) != null) {//readLine()方法, 用于讀取一行,只要讀取內(nèi)容不為空就一直執(zhí)行 b.append(str);//將該行內(nèi)容追加到字符串b的后面 for (int j = 0; j < str.length(); j++) {//for循環(huán)的條件,當(dāng)j小于該行長(zhǎng)度時(shí)就一直循環(huán)并自增 d = Character.toString(str.charAt(j));//返回一個(gè)字符串對(duì)象 if (d.equals("。")||d.equals("?")||d.equals("!")) {//if語句的條件,判斷是否為句子 e++;//若為一句則e自增一次 } } } in.close();//關(guān)閉流 System.out.println("該文本共有"+e+"個(gè)句子");//輸出總的句子數(shù) } catch (IOException e) {//當(dāng)try代碼塊有異常時(shí)轉(zhuǎn)到catch代碼塊 e.printStackTrace();//printStackTrace()方法是打印異常信息在程序中出錯(cuò)的位置及原因 } } }
3)運(yùn)行結(jié)果
(1)所有文件均保存在路徑D:\demo7下,首先對(duì)一個(gè)簡(jiǎn)單的文本文檔(格式為utf-8)的句子數(shù)進(jìn)行計(jì)算,該文本文檔命名為 lsy.txt,內(nèi)容如下:
從中可以看出該文本文檔中共有4句話,然后在命令行中對(duì)程序進(jìn)行編譯,并運(yùn)行程序讀取該txt文檔,計(jì)算結(jié)果如下:
(2)最后在命令行下使用該程序?qū)υ妗段饔斡洝穞xt文檔進(jìn)行計(jì)算,計(jì)算結(jié)果如下:
由此可以計(jì)算得出我使用的《西游記》文檔共含有30804個(gè)句子。
3、總結(jié)
通過該程序可以計(jì)算出文本的總句子數(shù),對(duì)于文本的的處理具有重要的意義,由于博主水平有限,故文章中的錯(cuò)誤之處懇請(qǐng)各位讀者指正,博主對(duì)此不勝感激。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
hutool實(shí)戰(zhàn):IoUtil 流操作工具類(將內(nèi)容寫到流中)
這篇文章主要介紹了Go語言的io.ioutil標(biāo)準(zhǔn)庫使用,是Golang入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下,如果能給你帶來幫助,請(qǐng)多多關(guān)注腳本之家的其他內(nèi)容2021-06-06maven如何動(dòng)態(tài)統(tǒng)一修改版本號(hào)的方法步驟
這篇文章主要介紹了maven如何動(dòng)態(tài)統(tǒng)一修改版本號(hào)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12IDEA項(xiàng)目啟動(dòng)時(shí)Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案
面對(duì)IDEA項(xiàng)目啟動(dòng)時(shí)報(bào)出的Flyway遷移校驗(yàn)和不匹配問題,核心在于保持遷移腳本的一致性、正確管理和理解Flyway的工作機(jī)制,本文介紹IDEA項(xiàng)目啟動(dòng)時(shí)Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案,感興趣的朋友一起看看吧2024-01-01Java使用JSONObject操作json實(shí)例解析
這篇文章主要介紹了Java使用JSONObject操作json,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java使用JSONObject解析json數(shù)據(jù)相關(guān)原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2020-04-04SpringCloud gateway request的body驗(yàn)證或修改方式
這篇文章主要介紹了SpringCloud gateway request的body驗(yàn)證或修改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07java堆棧類使用實(shí)例(java中stack的使用方法)
java中stack的使用方法,堆棧是一種"后進(jìn)先出"(LIFO) 的數(shù)據(jù)結(jié)構(gòu), 只能在一端進(jìn)行插入(稱為"壓棧") 或刪除 (稱為"出棧")數(shù)據(jù)的操作,下面看示例吧2013-12-12MyBatis映射文件中parameterType與resultType的用法詳解
MyBatis中的ParameterType指的是SQL語句中的參數(shù)類型,即傳入SQL語句中的參數(shù)的類型,下面這篇文章主要給大家介紹了關(guān)于MyBatis映射文件中parameterType與resultType用法的相關(guān)資料,需要的朋友可以參考下2023-04-04SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗問題及解決
這篇文章主要介紹了SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09