如何拆分字符串C#并忽略字符串中不完整的单词
我想做一个通用函数。我只想在数组中存储完整的单词。不完整的单词应该被忽略如何拆分字符串C#并忽略字符串中不完整的单词,c#,arrays,string,split,console,C#,Arrays,String,Split,Console,我想做一个通用函数。我只想在数组中存储完整的单词。不完整的单词应该被忽略 input Sentence = "Twinkle twinkle little star"; arr[i] = Convert.ToChar(sSplit[i]); result3 = result3 + arr[i].ToString(); `if(....) {//condition here, if result3.length is == 19 since it is a string you can co
input Sentence = "Twinkle twinkle little star";
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
我有一个数组大小arr[19]。这里的条件是,如果指针指向“liitle”,它将取upto“lit”,因此我不希望数组中拆分的单词,那么我必须删除单词“little”。需要数组中的完整单词。我想生成下面的输出
output sentence = "Twinkle twinkle"
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
我尝试下面的代码,那么我必须添加什么条件来忽略拆分的单词呢
static void Main(string[] args)
{
string strSentence = "Twinkle twinkle little star";
Console.WriteLine(strRead(strSentence));
Console.ReadLine();
}
public static string strRead(string str)
{
char[] arr = new char[19];
string result3 = "";
char[] sSplit = str.ToCharArray();
for (int i = 0; i < arr.Length; i++)
{
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
}
return result3;
}
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
static void Main(字符串[]args)
{
string stresent=“闪烁小星星”;
Console.WriteLine(strRead(strContent));
Console.ReadLine();
}
公共静态字符串stread(字符串str)
{
char[]arr=新字符[19];
字符串result3=“”;
char[]sSplit=str.ToCharArray();
对于(int i=0;i
更改行char[]arr=new char[19]
tochar[]arr=新字符[15]代码>
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
这将提供您需要的输出
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
原因是因为您将大小设置为19,在循环中,它将从句子中提取字符,直到单词“lit”为止,而句子“flankle-flankle-lit”的长度也是19
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
谢谢。稍微粗糙一点的解决方案可能是这样的:
private static string CutOff(string input, int length)
{
if ( length <= 0 ) throw new ArgumentOutOfRangeException(nameof(length));
if (length >= input.Length) return input; //whole input
var index = length - 1;
if (char.IsWhiteSpace(input[index])) return input.Substring(0, length); //just cut off
if (length < input.Length - 1 && !char.IsWhiteSpace(input[length]))
{
//word continues, search for whitespace character to the left
while (length >= 0 && !char.IsWhiteSpace(input[length]))
{
length--;
}
if ( length < 0)
{
//single long word
return "Can't cut off without breaking word";
}
}
//cut off by length
return input.Substring(0, length);
}
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
私有静态字符串截断(字符串输入,整数长度)
{
if(length=input.length)返回输入;//整个输入
var指数=长度-1;
if(char.IsWhiteSpace(input[index])返回input.Substring(0,length);//只需截断
if(长度=0&&!char.IsWhiteSpace(输入[length]))
{
长度--;
}
如果(长度<0)
{
//单个长单词
return“不断字不能断”;
}
}
//断断续续
返回输入。子字符串(0,长度);
}
它处理所有情况-如果字符串太短,它将返回全部内容。如果截止索引落在空白字符上,我们通常会将其截断。如果继续,我们将搜索最靠近左侧的空格。如果找不到,我们就不能安全地剪切,因为输入是一个长单词
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
为了更简单的解决方案,您可以按空格分解输入,然后继续添加符合所需长度的单词。然而,我的第一个解决方案更有效,因为它不需要额外的内存,也不需要读取整个字符串
private static string SplitCut( string input, int length)
{
var words = input.Split(" ");
StringBuilder builder = new StringBuilder();
foreach (var word in words)
{
if ( builder.Length + word.Length <= length)
{
builder.Append(word);
}
else
{
//can't add more
break;
}
}
if (builder.Length == 0)
return "Can't cut off without breaking word";
return builder.ToString();
}
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
private静态字符串SplitCut(字符串输入,整数长度)
{
var words=input.Split(“”);
StringBuilder=新的StringBuilder();
foreach(单词中的var单词)
{
如果(builder.Length+word.Length我真的不确定你想要实现什么,但是像这样的东西可能对你有用吗
var regex = new System.Text.RegularExpressions.Regex(@"^(.{0,19})\b(\s|$)");
var matches = regex.Match("Twinkle twinkle little star");
var success = matches.Success; // true
var result = matches.Groups[1]; // Twinkle twinkle
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
然后,您可以参数化19
的长度(如果您想这样做的话)。您可以这样做
public static string strRead(string str,int charCount)
{
string result3 = "";
var words = str.Split(' ');
var wordsCount = str.Length;
var selectedWordsLength = 0;
var spaceCharLength = 1;
for (int i = 0; i < words.Length; i++)
{
var word = words[i];
selectedWordsLength += word.Length + (spaceCharLength);
if(selectedWordsLength >=charCount)
{
break;
}
result3 = result3 + word + " ";
}
return result3;
}
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
在循环中添加if-else条件,如果变量result3的长度等于19,则中断
char[] arr = new char[19];
string result3 = "";
char[] sSplit = str.ToCharArray();
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
对于(int i=0;i
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
}此代码将解决您的问题。如果有不清楚的地方,请告诉我
arr[i] = Convert.ToChar(sSplit[i]);
result3 = result3 + arr[i].ToString();
`if(....) {//condition here, if result3.length is == 19 since it is a string you can count its length
break;
}`
static void Main(string[] args)
{
string input = "Twinkle twinkle little star";
int length = 19;
Console.WriteLine(CutOff(input,length));
}
private static string CutOff(string input, int length)
{
var solution = input.Substring(0, Math.Min(input.Length, Math.Max(0, length)));
if (solution.ElementAt(solution.Length-1) == ' ')
return solution.Trim();
if (input.ElementAt(solution.Length)!=' ')
{
var temp = solution.Split(' ');
var result = temp.Take(temp.Count() - 1).ToArray(); //remove the last word
return string.Join(" ", result); //convert array into a single string
}
return solution;
}
它是特定于字符串的吗?它只是用于此字符串还是多个不同的字符串?您不能只在“”上拆分并只打印前两个单词吗?您可以使用吗?我想创建一个通用函数。我只想在数组中存储完整的单词。不完整的单词应该忽略。什么是不完整的单词?您如何创建此通用函数?谁gave-ve评级?感谢您的回复,但我想做一个通用功能。我只想在数组中存储完整的单词。不完整的单词应该忽略为什么不检查循环中的空格bcoz通常在一个句子中的单词之间总是有空格。这应该解决您的问题。让我知道这是否适用于您。@Bheesham什么数组?您甚至没有单词数组??您好,在第一个解决方案中只有一个小错误。如果索引小于1,那么您的代码将抛出IndexOutOfRangeException异常。谢谢,错误现在已修复,但是如果(长度>=input.length&&length<1),我会在此行中添加条件返回输入;//如果length@Bheesham,整个输入实际上是length@Bheesham如果这对您没问题,您不需要任何额外的解释,请您标记/接受它好吗?我不能标记,我是新用户,我的堆栈溢出声誉很低