C# 在Windows Phone中将字符串拆分为多个文本框
由于WPhone中的UIElements有C# 在Windows Phone中将字符串拆分为多个文本框,c#,regex,string,windows-phone-8,split,C#,Regex,String,Windows Phone 8,Split,由于WPhone中的UIElements有2048x2048像素限制,因此我试图分割一个太长而无法显示的字符串 我尝试过实现ScrollableTextBlockdone,但没有成功。所以我正努力用另一种方式去做 我已经尝试在文本中使用通配符,特别是\r\n:当到达它时,使用Regex完成的方法拆分器将返回剩余的子字符串: private string Splitter(string str1) { MatchCollection matches = Regex.Matc
2048x2048像素
限制,因此我试图分割一个太长而无法显示的字符串
我尝试过实现ScrollableTextBlock
done,但没有成功。所以我正努力用另一种方式去做
我已经尝试在文本中使用通配符,特别是\r\n
:当到达它时,使用Regex
完成的方法拆分器将返回剩余的子字符串:
private string Splitter(string str1)
{
MatchCollection matches = Regex.Matches(str1,"\r\n");
int count = matches.Count / 2; //i want to split every text in half avoiding word truncating,
//so I'm getting the NewLine closest to the middle of the text
int pos= matches[count].Index; //I get the index of the char in str1
return str1.Substring(pos);
}
但是当到达匹配[count]
时,它会给我ArgumentIsNullException
如何解决这个问题?我想您可能只需要验证一下您的论点和匹配项。Count
:
private static string Splitter(string str1)
{
if (string.IsNullOrWhiteSpace(str1)) return str1;
MatchCollection matches = Regex.Matches(str1, "\r\n");
if (matches.Count == 0) return str1;
int count = matches.Count / 2;
int pos = matches[count].Index;
return str1.Substring(pos);
}
鲁弗斯的代码有一个潜在的问题,可能有不同的换行符或序列。我看到了其中包含\r\n
和\n
的文件。因此,我宁愿使用一个正则表达式来捕获最可能的事件-[\r\n]+
。我怀疑您的输入文件也只包含\n
新行分隔符
private static string Splitter(string str1)
{
if (string.IsNullOrWhiteSpace(str1)) return str1;
var matches = Regex.Matches(str1, @"[\r\n]+");
if (matches.Count == 0)
return str1;
else
{
var count = matches.Count / 2;
var pos = matches[count].Index;
return str1.Substring(pos);
}
}
// Input: "111\n2222\n3333"
// Output: "\n3333"
很抱歉反应太晚。我最终使用了.Split
方法,因为Regex
并不总是在我的字符串中找到\r\n
,这很奇怪(字符串是从SQLite数据库加载的,可能与UTF-8编码有关?)。无论如何,新的Splitter
方法可能效率低下且原始,但它是有效的:它将文本分成两个文本块。不管怎么说,我正在发布,也许有人也可以使用它
private void Splitter(string str)
{
StringBuilder build = new StringBuilder(); //it's more efficent for appending strings in a loop
string [] words = str.Split(new string[] { @"\r\n" }, StringSplitOptions.None);
int length=words.Length;
int half = length / 2;
//Appending first half
for (int i = 0; i < half; i++)
{
build.Append(words[i]+"\r\n"); //reintroducing the \r\n because I need
//to put a System.Enviornment.NewLine in place
//(and the Split method eliminates it)
}
txtTextBlock1.Text = build.ToString();
build.Clear();
//Appending second half
for (int i = half; i < length; i++)
{
build.Append(words[i] + "\r\n");
}
txtTextBlock2.Text = build.ToString();
}
private void拆分器(string str)
{
StringBuilder build=new StringBuilder();//在循环中附加字符串更有效
string[]words=str.Split(新字符串[]{@“\r\n”},StringSplitOptions.None);
int-length=words.length;
int half=长度/2;
//追加上半部分
对于(int i=0;i
非常感谢大家的帮助。为什么要使用regex?为什么不干脆str1.Split(“\r\n”)
?不幸的是,您的问题描述不是很清楚。您应该提供可靠地再现问题的代码,并且应该提供完整的异常信息(消息、堆栈跟踪以及发生异常的程序语句的清晰、明确的描述)。实际上,代码工作正常。使用输入字符串1行\r\n1行\r\n3行\r\n4行\r\n5行\r\n6行
,结果是\n4行\r\n5行\r\n6行
。也许,您应该首先检查str1是否为空或null,然后检查是否找到匹配项。@Stribizev是的,很抱歉@Peter Duniho没有正确解释我自己。无论如何,我最终使用了@Rufus L solution,奇怪的是字符串文本中根本没有通配符\r\n
,这非常奇怪。Regex.Matches
中的搜索字符串是否有特定格式?@RiccardoLomazzi:请检查我的答案。顺便说一句,你现在可以投票了,恭喜你@谢谢你让我知道,我决定编辑我的解释。