From 672d0850de8684e95d7605f5fa6a64ec996d8f83 Mon Sep 17 00:00:00 2001 From: lzj Date: Thu, 24 Oct 2019 17:07:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E7=A7=BB=E6=A4=8D?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- golang/test.go | 33 ++++++++++++- java/ToolGood/Words/StringSearch.java | 19 ++++---- java/ToolGood/Words/WordsSearch.java | 19 ++++---- java/ToolGood/Words/internals/TrieNode.java | 11 ++--- java/ToolGood/Words/internals/TrieNode2.java | 9 +--- java/ToolGood/Words/internals/TrieNodeEx.java | 10 ++-- java/com/example/demo/DemoApplication.java | 47 ++++++++++++++++++- 7 files changed, 105 insertions(+), 43 deletions(-) diff --git a/golang/test.go b/golang/test.go index f50ff90..93896fc 100644 --- a/golang/test.go +++ b/golang/test.go @@ -1,6 +1,9 @@ package main import "fmt" +import "io/ioutil" +import "strings" +import "time" import . "./ToolGood/Words" @@ -9,7 +12,8 @@ func main() { test_WordsSearch(); test_StringSearchEx(); test_WordsSearchEx(); - text_Save_Load() + test_Save_Load() + test_time() } func test_StringSearch(){ fmt.Println("test_StringSearch"); @@ -147,7 +151,7 @@ func test_WordsSearchEx(){ fmt.Println("Replace is Error."); } } -func text_Save_Load(){ +func test_Save_Load(){ fmt.Println("text_Save_Load"); test := "我是中国人" @@ -186,4 +190,29 @@ func text_Save_Load(){ if(str != "我是***" ){ fmt.Println("Replace is Error."); } +} +func test_time(){ + bs,_:= ioutil.ReadFile("BadWord.txt") + s:=string(bs) + s=strings.Replace(s, "\r\n", "\n", -1 ) + s=strings.Replace(s, "\r", "\n", -1 ) + sp := strings.Split(s, "\r") + list:=make([]string, 0) + for _,item :=range sp { + list=append(list,item) + } + bs2,_:= ioutil.ReadFile("Talk.txt") + words:=string(bs2) + + search:= NewStringSearchEx() + search.SetKeywords(list) + + dt:= time.Now() + for i := 0; i < 100000; i++ { + search.FindAll(words); + } + dt2:= time.Now() + + fmt.Println(dt2.Sub(dt)) + } \ No newline at end of file diff --git a/java/ToolGood/Words/StringSearch.java b/java/ToolGood/Words/StringSearch.java index dea82cb..a4ebf3e 100644 --- a/java/ToolGood/Words/StringSearch.java +++ b/java/ToolGood/Words/StringSearch.java @@ -52,7 +52,8 @@ public class StringSearch { if (tn != null) { links.put(Value, tn); } - } else if (node2.TryGetValue(Key, tn)) { + } else if (node2.HasKey(Key)) { + tn = node2.GetValue(Key); links.put(Value, tn); } TryLinks(Value, tn, links); @@ -69,10 +70,10 @@ public class StringSearch { if (ptr == null) { tn = _first[t]; } else { - if (ptr.TryGetValue(t, tn) == false) { + if (ptr.HasKey(t) == false) { tn = _first[t]; }else { - tn=ptr.GetValue(t);//TODO: 不太清楚 java out参数 怎么做? + tn=ptr.GetValue(t); } } if (tn != null) { @@ -96,10 +97,10 @@ public class StringSearch { if (ptr == null) { tn = _first[t]; } else { - if (ptr.TryGetValue(t, tn) == false) { + if (ptr.HasKey(t) == false) { tn = _first[t]; }else { - tn=ptr.GetValue(t);//TODO: 不太清楚 java out参数 怎么做? + tn=ptr.GetValue(t); } } if (tn != null) { @@ -123,10 +124,10 @@ public class StringSearch { if (ptr == null) { tn = _first[t]; } else { - if (ptr.TryGetValue(t, tn) == false) { + if (ptr.HasKey(t) == false) { tn = _first[t]; } else { - tn=ptr.GetValue(t);//TODO: 不太清楚 java out参数 怎么做? + tn=ptr.GetValue(t); } } if (tn != null) { @@ -154,10 +155,10 @@ public class StringSearch { if (ptr == null) { tn = _first[t]; } else { - if (ptr.TryGetValue(t, tn) == false) { + if (ptr.HasKey(t) == false) { tn = _first[t]; }else { - tn=ptr.GetValue(t);//TODO: 不太清楚 java out参数 怎么做? + tn=ptr.GetValue(t); } } if (tn != null) { diff --git a/java/ToolGood/Words/WordsSearch.java b/java/ToolGood/Words/WordsSearch.java index 4ec8bf5..28a8c52 100644 --- a/java/ToolGood/Words/WordsSearch.java +++ b/java/ToolGood/Words/WordsSearch.java @@ -61,7 +61,8 @@ public class WordsSearch{ if (tn != null) { links.put(Value, tn); } - } else if (node2.TryGetValue(Key, tn)) { + } else if (node2.HasKey(Key)) { + tn = node2.GetValue(Key); links.put(Value, tn); } TryLinks(Value, tn, links); @@ -79,10 +80,10 @@ public class WordsSearch{ if (ptr == null) { tn = _first[t]; } else { - if (ptr.TryGetValue(t, tn) == false) { + if (ptr.HasKey(t) == false) { tn = _first[t]; }else { - tn=ptr.GetValue(t);//TODO: 不太清楚 java out参数 怎么做? + tn=ptr.GetValue(t); } } if (tn != null) { @@ -109,10 +110,10 @@ public class WordsSearch{ if (ptr == null) { tn = _first[t]; } else { - if (ptr.TryGetValue(t, tn) == false) { + if (ptr.HasKey(t) == false) { tn = _first[t]; }else { - tn=ptr.GetValue(t);//TODO: 不太清楚 java out参数 怎么做? + tn=ptr.GetValue(t); } } if (tn != null) { @@ -142,10 +143,10 @@ public class WordsSearch{ if (ptr == null) { tn = _first[t]; } else { - if (ptr.TryGetValue(t, tn) == false) { + if (ptr.HasKey(t) == false) { tn = _first[t]; }else { - tn=ptr.GetValue(t);//TODO: 不太清楚 java out参数 怎么做? + tn=ptr.GetValue(t); } } if (tn != null) { @@ -173,10 +174,10 @@ public class WordsSearch{ if (ptr == null) { tn = _first[t]; } else { - if (ptr.TryGetValue(t, tn) == false) { + if (ptr.HasKey(t) == false) { tn = _first[t]; }else { - tn=ptr.GetValue(t);//TODO: 不太清楚 java out参数 怎么做? + tn=ptr.GetValue(t); } } if (tn != null) { diff --git a/java/ToolGood/Words/internals/TrieNode.java b/java/ToolGood/Words/internals/TrieNode.java index d04f35c..e3b72f9 100644 --- a/java/ToolGood/Words/internals/TrieNode.java +++ b/java/ToolGood/Words/internals/TrieNode.java @@ -18,16 +18,11 @@ public class TrieNode{ Results = new ArrayList(); } - public boolean TryGetValue(Character c, TrieNode node) + public boolean HasKey(Character c ) { - if (minflag <= (int)c && maxflag >= (int)c) { - if( m_values.containsKey(c)){ - node=m_values.get(c); - return true; - } - return false; + if (minflag <= c && maxflag >= c) { + return m_values.containsKey(c); } - node = null; return false; } public TrieNode GetValue(Character c ){ diff --git a/java/ToolGood/Words/internals/TrieNode2.java b/java/ToolGood/Words/internals/TrieNode2.java index aebaec9..129c5be 100644 --- a/java/ToolGood/Words/internals/TrieNode2.java +++ b/java/ToolGood/Words/internals/TrieNode2.java @@ -17,16 +17,11 @@ public class TrieNode2{ Results = new Hashtable(); } - public boolean TryGetValue(Character c, TrieNode2 node) + public boolean HasKey(Character c) { if (minflag <= c && maxflag >= c) { - if( m_values.containsKey(c)){ - node=m_values.get(c); - return true; - } - return false; + return m_values.containsKey(c); } - node = null; return false; } public TrieNode2 GetValue(Character c ){ diff --git a/java/ToolGood/Words/internals/TrieNodeEx.java b/java/ToolGood/Words/internals/TrieNodeEx.java index 5b6d5ce..5b15f8b 100644 --- a/java/ToolGood/Words/internals/TrieNodeEx.java +++ b/java/ToolGood/Words/internals/TrieNodeEx.java @@ -26,15 +26,11 @@ public class TrieNodeEx{ Results = new ArrayList(); } - public boolean TryGetValue(Character c, TrieNodeEx node) + public boolean HasKey(Character c) { if (minflag <= c && maxflag >= c) { - if( m_values.containsKey((int)c)){ - node=m_values.get((int)c); - return true; - } - return false; } - node = null; + return m_values.containsKey((int)c); + } return false; } diff --git a/java/com/example/demo/DemoApplication.java b/java/com/example/demo/DemoApplication.java index e3bc62a..11c9e21 100644 --- a/java/com/example/demo/DemoApplication.java +++ b/java/com/example/demo/DemoApplication.java @@ -1,8 +1,14 @@ package com.example.demo; import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; + +import org.springframework.util.StopWatch; import ToolGood.Words.StringSearch; import ToolGood.Words.StringSearchEx; @@ -24,7 +30,7 @@ public class DemoApplication { } catch (Exception e) { //TODO: handle exception } - + test_times(); } private static void test_StringSearch(){ @@ -230,4 +236,43 @@ public class DemoApplication { System.out.println("Replace is Error."); } } + + private static void test_times(){ + String ts= readLineByLineJava8("BadWord.txt"); + String[] sp=ts.split("[\r\n]"); + List list=new ArrayList(); + for (String item : sp) { + list.add(item); + } + String words= readLineByLineJava8("Talk.txt"); + + StringSearchEx iwords = new StringSearchEx(); + iwords.SetKeywords(list); + + StopWatch sw = new StopWatch(); + sw.start("校验耗时"); + for (int i = 0; i < 100000; i++) { + // iwords.ContainsAny(words); + iwords.FindAll(words); + // System.out.println(list2.size()); + } + sw.stop(); + System.out.println(sw.getTotalTimeMillis()+"ms"); + + } + + private static String readLineByLineJava8(String filePath) + { + StringBuilder contentBuilder = new StringBuilder(); + try (Stream stream = Files.lines( + Paths.get(filePath), StandardCharsets.UTF_8)) + { + stream.forEach(s -> contentBuilder.append(s).append("\n")); + } + catch (IOException e) + { + e.printStackTrace(); + } + return contentBuilder.toString(); + } }