标签: string-comparison

用于几乎相似值搜索的算法

PersonsSQL Server 2008中有表.

我的目标是找到地址几乎相似的人.

地址与列描述state,town,street,house,apartment,postcodephone.

由于某些州(非美国)和人为因素(地址错误等)存在某些特定差异,因此地址不会以相同的模式填充.

地址中最常见的错误

  1. 区分大小写
  2. 有人写了"apt.",另一个是"公寓"或"ap".(虽然地址不是用英文写的)
  3. 空格,圆点,逗号
  4. 写街道名称的差异,比如'博士 Jones str."或"琼斯医生街"或"D.乔恩.st."或"琼斯博士"等

主要问题是数据不是相同的模式,因此很难找到类似的地址.

这种问题有什么算法吗?

提前致谢.

UPDATE

  1. 正如我所提到的,地址分为不同的列.我应该生成字符串连接列还是为每列执行步骤?我假设我不应该连接列,但如果我将单独比较列,我应该如何组织它?我是否应该找到每个列的相似性,将它们联合起来或相交或其他什么?
  2. 我应该收集一些统计数据还是某种教育算法?

sql sql-server algorithm string-comparison

11
推荐指数
2
解决办法
4902
查看次数

rails比较params [:id]和session [:user_id]的值不起作用

从PHP迁移到摇滚乐之后我就开始崭露头角了,但是我对这种挫折并没有尽头,但希望有一个陡峭的学习曲线.

我正在关注如何在rails中制作一个Twitter克隆的指南,并继续沿着这条路径使它越来越像Twitter.

所以我有一个'用户'页面/users/show.html.erb,它显示了用户的所有帖子.

现在,如果当前登录的用户与页面所有者相同,我正在尝试显示文本框,以便用户可以添加新条目.

我应该有一个非常简单的东西

<% if params[:id] == session[:user_id] %>
    put the text box here
<% end %>

当然,这不起作用,但正好在它之上我输出了会话[:user_id]和参数[:id],打印输出完全相同.

如果我将==设置为!=,我会收到"将文本框置于此处"消息.

关于我做错了什么的任何建议?我知道这两个值匹配,正如我在网址和当前登录用户的输出中看到的那样.我也输出了

-<% session[:user_id] %>-
-<% params[:id] %>-

这样我就可以看到参数的两端都没有间隙或空格或其他字符,而且看起来都很干净.

输出看起来像这样

-4c4483ae15a7900fcc000003-
-4c4483ae15a7900fcc000003- 

这是用户的mongodb objectId,左侧有破折号,表示没有空格或任何东西.

ruby-on-rails string-comparison

11
推荐指数
1
解决办法
3万
查看次数

C#:关于ToUpper()和ToLower()的困惑

如果我做这样的事......

String myVar = "in";
if(myVar.ToUpper() == "in")
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)

这不会进入"if"阻止..正确吗?

要么

它是否会检查"in"和"IN"中的内容并执行其中的内容if if?如果是这样,为什么呢?是不是应该跳过"if"块里面的内容?

同样的混乱也是ToLower()如此

编辑:所以要检查两种情况,我需要写:

if((myVar.ToUpper().Equals("in"))&&(myVar.Equals("in")))
Run Code Online (Sandbox Code Playgroud)

像这样......好吗?

c# string-comparison

11
推荐指数
2
解决办法
1万
查看次数

唯一索引,varchar列和(空白)空格的行为

我正在使用Microsoft SQL Server 2008 R2(带有最新的Service Pack/patches),数据库排序规则是SQL_Latin1_General_CP1_CI_AS.

以下代码:

SET ANSI_PADDING ON;
GO

CREATE TABLE Test (
   Code VARCHAR(16) NULL
);
CREATE UNIQUE INDEX UniqueIndex
    ON Test(Code);

INSERT INTO Test VALUES ('sample');
INSERT INTO Test VALUES ('sample ');

SELECT '>' + Code + '<' FROM Test WHERE Code = 'sample        ';
GO
Run Code Online (Sandbox Code Playgroud)

产生以下结果:

(1排受影响)

Msg 2601,Level 14,State 1,Line 8

无法在对象'dbo.Test'中插入具有唯一索引'UniqueIndex'的重复键行.重复键值为(样本).

该语句已终止.

------------

>样品<

(1排受影响)

我的问题是:

  1. 我假设索引不能存储尾随空格.任何人都可以指向我指定/定义此行为的官方文档吗?
  2. 是否有一个设置来改变这种行为,也就是说,让它将'sample'和'sample'识别为两个不同的值(顺便说一句,它们都是这样),因此两者都可以在索引中.
  3. 为什么地球上的SELECT会返回一行?SQL Server必须使用WHERE子句中的空格做一些非常有趣/聪明的事情,因为如果删除索引中的唯一性,两个INSERT都将运行正常,SELECT将返回两行!

任何帮助/指针在正确的方向将不胜感激.谢谢.

t-sql sql-server unique-index string-comparison

11
推荐指数
1
解决办法
3726
查看次数

Visual Studio中stricmp和_stricmp的区别?

我可能会问一个愚蠢的问题,但我真的找不到谷歌的答案加上我仍然是使用MSVS的初学者.

我最近需要使用函数来比较两个字符串.我不明白的是stricmp和_stricmp的区别.它们都可用于比较字符串并返回相同的结果.我去检查一下:

char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown dog jumps over the lazy fox";

void main( void )
{
   char tmp[20];
   int result;
   /* Case sensitive */
   printf( "Compare strings:\n\t%s\n\t%s\n\n", string1, string2 );
   result = stricmp( string1, string2 );
   if( result > 0 )
      strcpy( tmp, "greater than" );
   else if( result < 0 )
      strcpy( tmp, "less than" );
   else
      strcpy( tmp, "equal to" );
   printf( "\tstricmp: …
Run Code Online (Sandbox Code Playgroud)

c++ case-sensitive case-insensitive string-comparison

11
推荐指数
2
解决办法
2万
查看次数

优化的strcmp实现

这个功能在这里找到.这是一个实现strcmp:

int strcmp(const char* s1, const char* s2)
{
    while (*s1 && (*s1 == *s2))
        s1++, s2++;
    return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}
Run Code Online (Sandbox Code Playgroud)

我理解除了最后一行之外的所有内容,简言之,最后一行是怎么回事?

c string-comparison strcmp

11
推荐指数
1
解决办法
2万
查看次数

Java:比较,标记和解释Java中的HTML文本

我正在开发一个Java项目,其中有一个HTML编辑器,用户可以在html编辑器(ckeditor)中输入文本,实际的HTML文本保存在数据库中.

现在,当用户下次再来,并编辑相同的文本时,我想通过比较它与数据库来显示两者之间的差异.

我面临的最重要的问题是,即使任何比较器工具知道Italic的样式已经变为Bold,比较器的输出也strike-throughs就是单词Italic和节目Bold插入代替它.

但这并不能解释实际编辑的意图行动.意图/行动是用户从Italic到Bold.我正在寻找的是一个工具,它不是显示Italic这个词被删除而Bold被添加而不是代替那个,它会向我显示Italic首先是删除的Bold 单词/句子以及用单词/句子替换.

我希望我的意思很明确.我一直在努力实现这一目标.我试过diff_match_patch,daisydiff等,没有任何帮助.

我的试验:

/*

            String oldTextHtml = mnotes1.getMnotetext();
            String newTextHTML = mnotes.getMnotetext();


            oldTextHtml = oldTextHtml.replace("<br>","\n");
            oldTextHtml = Jsoup.clean(oldTextHtml, Whitelist.basic());
           oldTextHtml = Jsoup.parse(oldTextHtml).text();

            newTextHTML = newTextHTML.replace("<br>","\n");
            newTextHTML = Jsoup.clean(newTextHTML,Whitelist.basic());
            newTextHTML = Jsoup.parse(newTextHTML).text();


            diff_match_patch diffMatchPatch = new diff_match_patch();
            LinkedList<diff_match_patch.Diff> deltas = diffMatchPatch.diff_main(oldTextHtml, newTextHTML);
            diffMatchPatch.diff_cleanupSemantic(deltas);
            newText += diffMatchPatch.diff_prettyHtml(deltas);
            groupNoteHistory.setWhatHasChanged("textchange");
            groupNoteHistory.setNewNoteText(newText);
            noEdit = true;
*/


           List<String> oldTextList = Arrays.asList(mnotes1.getMnotetext().split("(\\.|\\n)"));
            List<String> newTextList = Arrays.asList(mnotes.getMnotetext().split("(\\.|\\n)"));
            if (oldTextList.size() == newTextList.size()) …
Run Code Online (Sandbox Code Playgroud)

html java string string-comparison

11
推荐指数
1
解决办法
2176
查看次数

1长度字符串比较给出了不同于字符比较的结果...为什么?

我在C#中很新,我在字符串比较中发现了一些我不太懂的东西.

有人可以解释一下为什么字符之间的比较给出了与下面代码中一个字符长度字符串的比较相反的结果吗?

我预计这"9" < "="将是true(因为'9'(57)的unicode代码比'='(61)的unicode代码少但是它是假的...后面的字符串的比较逻辑是什么,为什么它不同于比较字符?

码:

bool resChComp = '9' < '=';
bool resStrComp = String.Compare("9", "=") < 0;

Console.WriteLine($"\n'9' < '=' : {resChComp}, \"9\" < \"=\" : { resStrComp }");
Run Code Online (Sandbox Code Playgroud)

输出:

'9' < '=' : True, "9" < "=" : False
Run Code Online (Sandbox Code Playgroud)

c# string-comparison

11
推荐指数
1
解决办法
147
查看次数

JavaScript正则表达式测试,如果字符串包含特定的单词(带变量)

我有一个正则表达式来检查字符串是否包含特定的单词.它按预期工作:

/\bword\b/.test('a long text with the desired word amongst others'); // true
/\bamong\b/.test('a long text with the desired word amongst others'); // false
Run Code Online (Sandbox Code Playgroud)

但我需要一个即将在变量中检查的词.使用new RegExp不正常,它总是返回false:

var myString = 'a long text with the desired word amongst others';

var myWord = 'word';
new RegExp('\b' + myWord + '\b').test(myString); // false

myWord = "among";
new RegExp('\b' + myWord + '\b').test(myString); // false
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

javascript regex string-comparison

10
推荐指数
1
解决办法
2万
查看次数

为什么OrdinalIgnoreCase和InvariantCultureIgnoreCase会返回不同的结果?

当涉及到仅限英语的字符串时,我想StringComparison.OrdinalIgnoreCaseStringComparison.InvariantCultureIgnoreCase做同样的工作.但是,我正在使用以下代码中的情况并非如此:

// Returns 0
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","?877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.InvariantCultureIgnoreCase)

// Returns -1
string.Compare("877495169FA05B9D8639A0EBC42022338F7D2324","?877495169fa05b9d8639a0ebc42022338f7d2324", StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

有什么特别的原因吗?

c# string-comparison

10
推荐指数
1
解决办法
6485
查看次数