由于WPhone中的UIElements存在2048x2048 pixel
限制,我正在尝试拆分太长而无法显示的字符串。
我已尝试实施ScrollableTextBlock
已完成here但未成功。所以我正在努力以另一种方式做到这一点。
我尝试在文本中使用通配符,特别是\r\n
:当它到达时,使用Splitter
完成的方法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);
}
但它在到达matches[count]
时给了我ArgumentIsNullException。
我该如何解决这个问题?
答案 0 :(得分:1)
我认为你可能只需要对你的论点和matches.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);
}
答案 1 :(得分:1)
Rufus代码存在一个潜在问题,即可能存在不同的换行符号或序列。我看过其中包含\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"
答案 2 :(得分:0)
对于迟到的回复感到抱歉。我最终使用.Split
方法,因为Regex
并不总是在我的字符串中找到\r\n
,这很奇怪(字符串是从SQLite数据库加载的,也许它有事情要做使用UTF-8编码?)无论如何,新的Splitter
方法可能是无效且原始的,但有效:它将文本分成两个TextBlocks。无论如何我都会张贴它,也许有人也可以使用它。
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();
}
非常感谢大家的帮助。