日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java处理中文字符串_Java实现读取文章中重复出现的中文字符串

發(fā)布時間:2023/12/10 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java处理中文字符串_Java实现读取文章中重复出现的中文字符串 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在上個星期阿里巴巴一面的時候,最后面試官問我如何把一篇文章中重復(fù)出現(xiàn)的詞或者句子找出來,當時太緊張,答的不是很好。今天有時間再來親手實現(xiàn)一遍。其實說白了也就是字符串的處理,所以難度并不是很大。

以下是代碼和運行效果:

實現(xiàn)方法:

import java.io.*;

import java.util.*;

/**

* Created by chunmiao on 17-3-20.

*/

public class ReadArticle {

//讀取文件名稱

private String filename;

//讀取段落

private ArrayList result = new ArrayList<>();

//最小字長(兩個字以上進行匹配)

private final int MINSIZE = 2;

//重復(fù)詞儲存

HashSet set;

public ReadArticle(String filename, HashSet set) {

this.filename = filename;

this.set = set;

}

public void createData() throws IOException {

String r;

//讀取文章內(nèi)容

BufferedReader in = new BufferedReader(new FileReader(new File(filename).getAbsoluteFile()));

try {

while ((r = in.readLine()) != null) {

//消除不必要的標點符號

r = r.replaceAll("\\s+ |“|\\[|‘|《| *|", "").trim();

//留下” , 。 ?!?”。 ”, ? 》 -等作為劃分句子的分割符標示

Collections.addAll(result, r.split(",|(?!眧”(。|,)|。)|(\\])|”|'|?|:|》|-"));

}

}finally {

in.close();

}

//對文章內(nèi)容進行遍歷找出重讀出現(xiàn)的句子或者是詞語

for (int i = 0 ; i < result.size() - 1; i ++){

for (int j = 0 ; j < result.size() - i - 1; j ++) {

//將重復(fù)出現(xiàn)的詞語保存到set集合里面

set.addAll(getSameCharacter(result.get(i), result.get(j + i + 1)));

}

}

}

private ArrayList getSameCharacter(String a1, String a2){

String maxS;

String minS;

//短句遍歷開始處

int start = 0;

//詞的長度最短為兩個字長

int range =2;

//設(shè)定短句和長句s,使得遍歷更加快捷

if (a1.length() <= a2.length()){

maxS = a2;

minS = a1;

}else {

maxS = a1;

minS = a2;

}

String result = "";

ArrayList list = new ArrayList();

//防止substring時超出范圍

while (start + range <= minS.length()) {

//如果句子或詞在對象里面,則找出相應(yīng)的句子或詞保存在list里面

if (maxS.indexOf(minS.substring(start, start + range)) != -1) {

//獲取最長句子,刪除短句子

list.remove(result);

list.add(minS.substring(start, start + range));

result = minS.substring(start, start + range);

range++;

continue;

}

range = MINSIZE;

start++;

}

return list;

}

}

測試代碼:

import java.io.IOException;

import java.util.HashSet;

public class Main {

public static void main(String[] args) throws IOException {

String filename = "test.txt";

HashSet result = new HashSet();

ReadArticle read = new ReadArticle(filename,result);

read.createData();

System.out.println("這篇文章中的重復(fù)出現(xiàn)的詞或句子有以下幾個詞或句子:\n");

for (String s : result){

System.out.println(s);

}

}

}

讀取的文章內(nèi)容:

正則匹配結(jié)果(去掉多余字符):

字符串轉(zhuǎn)換成ArrayList:

最終處理結(jié)果:

其實從上面的結(jié)果可以看出。單純的操控字符串并不能判斷它是否是一個完整的詞和句,應(yīng)該還要配合數(shù)據(jù)庫字典來匹配上面的結(jié)果,從而找出真正的詞和句

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

總結(jié)

以上是生活随笔為你收集整理的java处理中文字符串_Java实现读取文章中重复出现的中文字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。