我要执行一项常规功能。我只想在数组中存储完整的单词。不完整的单词应被忽略
input Sentence = "Twinkle twinkle little star";
我有一个数组大小arr [19]。这里的条件是,如果指针指向“ liitle”,它将占用最多的“ lit”,因此我不希望数组中的拆分单词出现,那么我必须删除单词“ little”。想要数组中完整的单词。我想生成以下输出。
output sentence = "Twinkle twinkle"
我尝试下面的代码,所以我必须添加什么条件来忽略分割词
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;
}
答案 0 :(得分:0)
将行char[] arr = new char[19];
更改为char[] arr = new char[15];
。
这将提供您需要的输出。
原因是因为您将大小设为19,并且循环使用了从句子到单词“ lit”的字符,并且句子“ Twinkle twinkle lit”的长度也为19。
谢谢。
答案 1 :(得分:0)
一个大概的解决方案可能看起来像这样:
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);
}
它处理所有情况-如果字符串太短,它将返回整个内容。如果截止索引落在空白字符上,我们通常会对其进行切割。如果继续,我们在左侧搜索最接近的空格。如果找不到任何内容,则无法安全剪切,因为输入内容是一个长字。
为方便解决方案,您可以按空格分解输入,然后在符合要求的长度时继续添加单词。但是,我的第一个解决方案效率更高,因为它不需要额外的内存,也不需要读取整个字符串。
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();
}
答案 2 :(得分:0)
我不确定自己要达到什么目的,但也许对您有用吗?
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
然后您可以将19
的长度参数化(如果您要这样做)。
答案 3 :(得分:0)
您可以做类似的事情。
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;
}
并像这样使用它
strRead(strSentence,19)
答案 4 :(得分:0)
在循环中添加if-else条件,如果变量result3的长度等于19则中断
char[] arr = new char[19];
string result3 = "";
char[] sSplit = str.ToCharArray();
for(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;
}`
答案 5 :(得分:0)
此代码将解决您的问题。让我知道是否有不清楚的地方。
# ind: 0 1 2 3* 4 5 6 7
x == [1.0, 7.0, 0.0, 11.0, 0.0, 6.0, 0.0, 3.0]