C# 在Windows Phone中将字符串拆分为多个文本框

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

由于WPhone中的UIElements有
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:请检查我的答案。顺便说一句,你现在可以投票了,恭喜你@谢谢你让我知道,我决定编辑我的解释。