mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
添加单元测试,并且在测试过程中发现代码HighMultiReplacerV2存在问题,进行修复
This commit is contained in:
parent
31b7583369
commit
e20d355157
@ -61,7 +61,7 @@ public class HighMultiReplacerV2 extends StrReplacer {
|
|||||||
final char ch = text.charAt(i);
|
final char ch = text.charAt(i);
|
||||||
final Integer index = charIndexMap.get(ch);
|
final Integer index = charIndexMap.get(ch);
|
||||||
// 下一个字符在候选转换字符串中都不存在 ch字符一定不会被替换
|
// 下一个字符在候选转换字符串中都不存在 ch字符一定不会被替换
|
||||||
if(index < 0){
|
if(index == null || index < 0){
|
||||||
// 临时缓存空间中的数据写入到输出的 StringBuilder
|
// 临时缓存空间中的数据写入到输出的 StringBuilder
|
||||||
if(temp.length() > 0){
|
if(temp.length() > 0){
|
||||||
stringBuilder.append(temp);
|
stringBuilder.append(temp);
|
||||||
@ -92,14 +92,16 @@ public class HighMultiReplacerV2 extends StrReplacer {
|
|||||||
|
|
||||||
// 表示匹配到 现在进行字符串替换工作
|
// 表示匹配到 现在进行字符串替换工作
|
||||||
if(currentNode.isEnd){
|
if(currentNode.isEnd){
|
||||||
final int length = currentNode.tagetString.length();
|
final int length = currentNode.tagetString.length() - 1;
|
||||||
// 先清理匹配到的字符 最后一个字符未加入临时空间
|
// 先清理匹配到的字符 最后一个字符未加入临时空间
|
||||||
temp.delete(temp.length() - length + 1,length - 1);
|
temp.delete(temp.length() - length,temp.length());
|
||||||
if(temp.length() > 0){
|
if(temp.length() > 0){
|
||||||
stringBuilder.append(temp);
|
stringBuilder.append(temp);
|
||||||
}
|
}
|
||||||
// 写入被替换的字符串
|
// 写入被替换的字符串
|
||||||
stringBuilder.append(replaceMap.get(currentNode.tagetString));
|
stringBuilder.append(replaceMap.get(currentNode.tagetString));
|
||||||
|
// 将临时空间删除
|
||||||
|
temp.delete(0, temp.length());
|
||||||
// 因为字符串被替换过了 所以当前节点重新指向 root
|
// 因为字符串被替换过了 所以当前节点重新指向 root
|
||||||
currentNode = root;
|
currentNode = root;
|
||||||
continue;
|
continue;
|
||||||
|
@ -0,0 +1,50 @@
|
|||||||
|
package org.dromara.hutool.core.text.finder;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author cmm
|
||||||
|
* @date 2024/8/12 11:16
|
||||||
|
*/
|
||||||
|
public class MultiStrFinderTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test1(){
|
||||||
|
ArrayList<String> strings = new ArrayList<>();
|
||||||
|
strings.add("sha");
|
||||||
|
strings.add("asa");
|
||||||
|
strings.add("ha");
|
||||||
|
strings.add("hex");
|
||||||
|
MultiStrFinder finder = MultiStrFinder.of(strings);
|
||||||
|
String text = "asdasahhxxeshaaahexaaasa";
|
||||||
|
Map<String, List<Integer>> match = finder.findMatch(text);
|
||||||
|
System.out.println(text);
|
||||||
|
match.forEach((k,v) -> {
|
||||||
|
System.out.println(k + ":" + v);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test2(){
|
||||||
|
ArrayList<String> strings = new ArrayList<>();
|
||||||
|
strings.add("沙漠");
|
||||||
|
strings.add("撒");
|
||||||
|
strings.add("哈");
|
||||||
|
strings.add("害克斯");
|
||||||
|
MultiStrFinder finder = MultiStrFinder.of(strings);
|
||||||
|
String text = "撒哈拉大沙漠,你看哈哈哈。hex码中文写成海克斯科技";
|
||||||
|
Map<String, List<Integer>> match = finder.findMatch(text);
|
||||||
|
System.out.println(text);
|
||||||
|
match.forEach((k,v) -> {
|
||||||
|
System.out.println(k + ":" + v);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package org.dromara.hutool.core.text.replacer;
|
||||||
|
|
||||||
|
import org.dromara.hutool.core.text.finder.MultiStrFinder;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author cmm
|
||||||
|
* @date 2024/8/12 14:49
|
||||||
|
*/
|
||||||
|
public class HighMultiReplacerV2Test {
|
||||||
|
@Test
|
||||||
|
public void test1(){
|
||||||
|
HashMap<String, String> replaceMap = new HashMap<>();
|
||||||
|
replaceMap.put("sha","SHA");
|
||||||
|
replaceMap.put("asa","ASA");
|
||||||
|
replaceMap.put("ha","HA");
|
||||||
|
replaceMap.put("hex","HEX");
|
||||||
|
HighMultiReplacerV2 replacer = new HighMultiReplacerV2(replaceMap);
|
||||||
|
String text = "asdasahhxxeshaaahexaaasa";
|
||||||
|
CharSequence apply = replacer.apply(text);
|
||||||
|
replaceMap.forEach((k,v) -> {
|
||||||
|
System.out.println(k + ":" + v);
|
||||||
|
});
|
||||||
|
System.out.println(text);
|
||||||
|
System.out.println(apply);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test2(){
|
||||||
|
HashMap<String, String> replaceMap = new HashMap<>();
|
||||||
|
replaceMap.put("沙漠","什么");
|
||||||
|
replaceMap.put("撒","厦");
|
||||||
|
replaceMap.put("哈","蛤");
|
||||||
|
replaceMap.put("海克斯","害可是");
|
||||||
|
HighMultiReplacerV2 replacer = new HighMultiReplacerV2(replaceMap);
|
||||||
|
String text = "撒哈拉大沙漠,你看哈哈哈。hex码中文写成海克斯科技,海克,沙子收拾收拾,撤退,撒下了句点";
|
||||||
|
CharSequence apply = replacer.apply(text);
|
||||||
|
replaceMap.forEach((k,v) -> {
|
||||||
|
System.out.println(k + ":" + v);
|
||||||
|
});
|
||||||
|
System.out.println(text);
|
||||||
|
System.out.println(apply);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user