之前在做一个任务时, 需要比较字符串的相似度, 最终整理了一个出来, 以下:

  1 /*
2 * Copyright (c) 2013 Thyiad
3 * Author: Thyiad
4 * Create date: 2013/08/08
5 */
6
7 using System;
8
9 namespace Thyiad.Utility
10 {
11 /// <summary>
12 /// Operates about string.
13 /// </summary>
14 public static class StringUtil
15 {
16 /// <summary>
17 /// Compare with two string, return avg similar degree.
18 /// </summary>
19 /// <param name="str1"></param>
20 /// <param name="str2"></param>
21 /// <returns>A number of percent.</returns>
22 public static int StrSim(string str1, string str2)
23 {
24 try
25 {
26 if (str1 == null || str2 == null ||
27 (str1 == string.Empty && str2 != string.Empty) ||
28 (str1 != string.Empty && str2 == string.Empty))
29 {
30 return 0;
31 }
32 else if (str1.Equals(str2))
33 {
34 return 100;
35 }
36
37 int similar1 = 0;
38 int similar2 = 0;
39
40 similar1 = StrSimSub2(str1, str2);
41 similar2 = StrSimSub2(str2, str1);
42
43 return ((similar1 + similar2) / 2);
44 }
45 catch (Exception)
46 {
47 throw;
48 }
49 }
50
51 /// <summary>
52 /// Compare with two string, return similar degree.
53 /// </summary>
54 /// <param name="str1"></param>
55 /// <param name="str2"></param>
56 /// <returns>A number of percent.</returns>
57 private static int StrSimSub2(string str1, string str2)
58 {
59 try
60 {
61 int len1, len2;
62 int pos1, pos2;
63 char char1, char2;
64 int val1, val_min, val_max;
65
66 len1 = str1.Length;
67 len2 = str2.Length;
68 pos1 = 1;
69 val1 = 0;
70
71 if (len1 < len2)
72 {
73 val_max = len2 + 1;
74 }
75 else
76 {
77 val_max = len1 + 1;
78 }
79
80 while (pos1 <= len1)
81 {
82 char1 = str1[pos1 - 1];
83 pos2 = 1;
84 val_min = val_max;
85 while (pos2 <= len2)
86 {
87 char2 = str2[pos2 - 1];
88 if (char1 == char2)
89 {
90 if (Math.Abs(pos1 - pos2) < val_min)
91 {
92 val_min = Math.Abs(pos1 - pos2);
93 }
94 }
95 pos2++;
96 }
97 pos1++;
98 val1 = val1 + val_min;
99 }
100
101 return (100 - (val1 * 100 / (len1 * val_max)));
102 }
103 catch (Exception)
104 {
105 throw;
106 }
107 }
108 }
109 }

最新文章

  1. Yahoo14条军规-前端性能优化
  2. JavaScript闭包浅谈
  3. 【shiro】shiro学习笔记1 - 初识shiro
  4. Gradle tip #1: tasks
  5. C# js asp.net 字符串MD5加密GetMD5Hash
  6. bignum 大数模板
  7. c#面试题及答案
  8. [jquery]高级篇--获取div子元素
  9. mssql 查询全部用户创建表 条数及占用空间大小(KB)
  10. Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)
  11. 程序员的自我救赎---3.1:理解Oauth2.0
  12. JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
  13. Activity之间的数据传递-android学习之旅(四十七)
  14. Spring使用Autowiring自动装配 解决提示报错小技巧
  15. sprintf-%s的用法
  16. VIM命令操作
  17. dubbo源码解析-spi(一)
  18. RabbitMQ的一些说明
  19. [C#学习笔记]C#中的decimal类型——《CLR via C#》
  20. vagrant boxes

热门文章

  1. eclipse导入web项目变成java项目解决办法
  2. 【笔记】css浮动的一些个人见解
  3. TCP是什么? 最简单的三次握手说明
  4. JavaScript中事件绑定的三种方式
  5. Log4j扩展使用--自定义输出
  6. MyEclipse安装插件
  7. php curl模拟登陆抓取数据
  8. ORACLE 博客文章目录(2015
  9. scala 小结(一)
  10. execl列数据成等差递增递减