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

时间:2015-03-27 19:30:10

标签: c# regex string windows-phone-8 split

由于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。

我该如何解决这个问题?

3 个答案:

答案 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();

    }

非常感谢大家的帮助。