如何查找末尾带有标点符号的字符串
How to find string with punctuation at the end
我试图理解,为什么当我检查我的文本文档内容(更新的内容,每次都是新字符串)并为类似的已经存在的字符串插入新内容时,例如,如果文档内容是:
hello world
hello, world
hello, world.
.hello, world
如果它已经存在于文件内容中,它会找到新添加的字符串,如果它是“hello world”或“hello, world",带有简单的检查条件,它会通知我字符串是否已经存在(并且对于字符串中的最后一个符号没有任何限制或其他条件):
List<string> wordsTyped = new List<string>();
if (wordsTyped.Contains(newStr))
{
string[] allLines = File.ReadAllLines(path);
}
但如果我的文档内容字符串的末尾或开头有标点符号,它不会通知我。例如,如果“hello, world.”已经存在,并且新插入类似于“hello, world.”或“,hello, world" 它没有找到它并通知我它不存在。
如果没有解决这个问题的方法并且我不得不删除字符串中的最后一个特殊符号,在这种情况下最好知道如何使用正则表达式来处理某些符号点,逗号、散列和撇号,当然保留其他所有内容
您可能希望使用 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)));
}
将输出:
The string "h,e.l!l:o. w----orl.d." is already here
The string "h,e.l!l:o. w----ol.d." is not here
您可以像这样使用 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
我试图理解,为什么当我检查我的文本文档内容(更新的内容,每次都是新字符串)并为类似的已经存在的字符串插入新内容时,例如,如果文档内容是:
hello world
hello, world
hello, world.
.hello, world
如果它已经存在于文件内容中,它会找到新添加的字符串,如果它是“hello world”或“hello, world",带有简单的检查条件,它会通知我字符串是否已经存在(并且对于字符串中的最后一个符号没有任何限制或其他条件):
List<string> wordsTyped = new List<string>();
if (wordsTyped.Contains(newStr))
{
string[] allLines = File.ReadAllLines(path);
}
但如果我的文档内容字符串的末尾或开头有标点符号,它不会通知我。例如,如果“hello, world.”已经存在,并且新插入类似于“hello, world.”或“,hello, world" 它没有找到它并通知我它不存在。
如果没有解决这个问题的方法并且我不得不删除字符串中的最后一个特殊符号,在这种情况下最好知道如何使用正则表达式来处理某些符号点,逗号、散列和撇号,当然保留其他所有内容
您可能希望使用 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)));
}
将输出:
The string "h,e.l!l:o. w----orl.d." is already here
The string "h,e.l!l:o. w----ol.d." is not here
您可以像这样使用 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