如何拆分字符串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]
to
char[]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如果这对您没问题,您不需要任何额外的解释,请您标记/接受它好吗?我不能标记,我是新用户,我的堆栈溢出声誉很低