2016-10-24 4 views
0

私はテキストドキュメントの内容(更新されたコンテンツ、新しい文字列であるたびに)をチェックして、同じような文字列が存在するかどうかを調べる理由を理解しようとしています。文書の内容は次のとおりです。最後に句読点を含む文字列を見つける方法

hello world 
hello, world 
hello, world. 
.hello, world 

、それは簡単なチェックの状態で、既にそれは「ハロー世界」であれば、ファイルの内容に存在するか、「こんにちは、世界」されている場合、それは新たな付加文字列を設立、これ文字列がすでに存在するかどうかを通知します(文字列内の最後のシンボルに関する制限やその他の条件はありません)。

文書の内容の文字列に文字列の末尾または冒頭に句読点記号がある場合は通知しません。たとえば、 "hello、world。"が既に存在し、新しい挿入物が ""または "、hello、world hello"と似ていると見つからず、存在しないと通知します。

この問題を解消する解決策がなく、文字列の最後の特殊記号を削除する必要がある場合は、この場合、特定の記号の正規表現を使用する方法も知っておくとよいでしょう。ドット、コンマ、ハッシュ、アポストロフィを使用して、他のすべてのものを保持する

+0

詳しく説明して編集してください、疑問点が不明確である不明確 – Jim

+0

@Jimのですか?文字列の最後に句読点がある場合は、テキストドキュメント内の文字列を見つけることができません。私は** h、el!l:o **を見つけることができますが、** h、el!l:o ** **または** h、el!または**、h、el!l:o **文字列の先頭にある場合 –

+0

入力文字列の前と後に特殊文字が必要な場合は、for-loopを使用して配列の文字列のcontainsメソッドを使用して "hello world"をチェックします。 「こんにちは世界」を含んでいます。あなたはそれらの単語の間に特殊文字がある場合、[このスレッドを見てください](http://stackoverflow.com/questions/6555182/remove-all-special-characters-except-space-from-a-string-using -javascript)を使って正規表現の大まかなアイデアを得る。私はまた、regex101.comのようなあなたの正規表現を作成することをお勧めしたいと思います。 – Seth

答えて

1

アクセスが高速なので、既に持っている文字列を保存するには、HashSetを使用します。そして、あなたは、文字列にしたくないすべての文字を削除します。

ここ
static String beautify(String ugly) 
{ 
    return String.Join("", ugly.Where(c => Char.IsLetter(c))); 
} 

私は文字が文字である場合にのみ、あなたは、もちろん、あなたのニーズを感じるためにそれを適応させることができますチェックするために自由を取りました。

文字列:出力は以下となります

static HashSet<String> lines = new HashSet<String>(); 
static List<String> input = new List<String>() 
{ 
    "hello world","hello, world","hello, world.",".hello, world", 
}; 

static void Main(String[] args) 
{ 
    initList(input); 
    var tests = new List<String>() { 
     "h,e.l!l:o. w----orl.d.",// True 
     "h,e.l!l:o. w----ol.d.",// False 

    }; 

    foreach(var test in tests) 
    { 
     Console.WriteLine($"The string \"{test}\" is {(lines.Contains(beautify(test)) ? "already" : "not")} here"); 
    } 

    Console.ReadLine(); 
} 

static void initList(List<String> input) 
{ 
    foreach(String s in input) 
     lines.Add(beautify(s)); 
} 

static String beautify(String ugly) 
{ 
    return String.Join("", ugly.Where(c => Char.IsLetter(c))); 
} 

:その後、この小さなプログラムを使用 "時間、e.lリットル:!。。O W ---- orl.dを"すでにここにある

文字列 "h、e.l!l:o。w ---- ol.d。"あなたはそうのようなHashSetのを使用することができ、ここで


ではありません。

lines 
Count = 4 
    [0]: "hello world" 
    [1]: "hello, world" 
    [2]: "hello, world." 
    [3]: ".hello, world" 
lines.Contains("hello, world.") 
true 
lines.Contains("hello, world..") 
false 
+0

こんにちは、非常に便利ですが、私の場合はありません。新しい挿入物や更新されたコンテンツをそれぞれHashSetで予測することはできず、余分な句読点を削除してHashSetの固定コンテンツと比較して文字列を見つけることはできません。私は文字列から句読点を削除したくないので、保存したとおりに正確に見つけて、新しい挿入物が存在する文字列と等しいかどうかを知りたい。もし私が既に文字列** ok **を持っていて、最後にドットが付いていて、私の新しい挿入物が** okです。**私はそれを探しています。句読点が文字列の終わりまたは先頭に来るまでは** ok **と** ok **で動作します。** ok **と** ok ** ** –

+0

@mickbtはハッシュセットを使用しません。美化機能 –

+0

はい、しかし、私はこのソリューションを使用するには、HashSetで文字列を処方する必要がある場合、私は新しい文字列のユーザーがファイルに入れて、それを要求した場合、それをしたいですか?たぶん私はこのソリューションを正しく理解していないのでしょうか? –

関連する問題