我有一个字符串需要转换为字符串中每个单词的String[]
。但是我不需要任何空格或任何标点符号,除了属于该单词的连字符和撇号。
示例输入:
Hello! This is a test and it's a short-er 1. - [ ] { } ___)
从输入中生成的数组示例:
[ "Hello", "this", "is", "a", "test", "and", "it's", "a", "short-er", "1" ]
目前这是我试过的代码
(注意:当调用string.First()
时,第2个程序会在程序中出现错误):
private string[] ConvertWordsFromFile(String NewFileText)
{
char[] delimiterChars = { ' ', ',', '.', ':', '/', '|', '<', '>', '/', '@', '#', '$', '%', '^', '&', '*', '"', '(', ')', ';' };
string[] words = NewFileText.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);
return words;
}
或
private string[] ConvertWordsFromFile(String NewFileText)
{
return Regex.Split(NewFileText, @"\W+");
}
第二个示例使用以下代码崩溃
private string GroupWordsByFirstLetter(List<String> words)
{
var groups =
from w in words
group w by w.First();
return FormatGroupsByAlphabet(groups);
}
具体而言,当调用w.First()
时。
答案 0 :(得分:4)
从字符串中删除不需要的字符
string randomString = "thi$ is h@ving s*me inva!id ch@rs";
string excpList ="$@*!";
LINQ选项1
var chRemoved = randomString
.Select(ch => excpList.Contains(ch) ? (char?)null : ch);
var Result = string.Concat(chRemoved.ToArray());
LINQ选项2
var Result = randomString.Split().Select(x => x.Except(excList.ToArray()))
.Select(c => new string(c.ToArray()))
.ToArray();
答案 1 :(得分:1)
这是我做的一些事情。在\n
上拆分并删除任何不需要的字符。
private string ValidChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'-";
private IEnumerable<string> SplitRemoveInvalid(string input)
{
string tmp = "";
foreach(char c in input)
{
if(c == '\n')
{
if(!String.IsNullOrEmpty(tmp))
{
yield return tmp;
tmp = "";
}
continue;
}
if(ValidChars.Contains(c))
{
tmp += tmp;
}
}
if (!String.IsNullOrEmpty(tmp)) yield return tmp;
}
用法可能是这样的:
string[] array = SplitRemoveInvalid("Hello! This is a test and it's a short-er 1. - [ ] { } _)")
.ToArray();
我没有真正测试它,但它应该工作。如果它没有,它应该很容易修复。
答案 2 :(得分:0)
string strings = "4,6,8\n9,4";
string [] split = strings .Split(new Char [] {',' , '\n' });
或强>
如果您收到任何不需要的空物品,请尝试以下操作。 String.Split Method (String[], StringSplitOptions)
string [] split = strings .Split(new Char [] {',' , '\n' },
StringSplitOptions.RemoveEmptyEntries);
答案 3 :(得分:0)
通过匹配单词,可以通过RegEx轻松完成。我正在使用以下RegEx,它将允许在单词中间使用连字符和撇号,但如果它们出现在单词边界,则会将它们删除。
\w(?:[\w'-]*\w)?
在行动here中查看。
在C#中,它看起来像这样:
private string[] ConvertWordsFromFile(String NewFileText)
{
return (from m in new Regex(@"\w(?:[\w'-]*\w)?").Matches(NewFileText)
select m.Value).ToArray();
}
我正在使用LINQ从MatchCollection
返回的Matches
中获取一系列字词。