【发布时间】:2010-12-21 08:04:34
【问题描述】:
我有一个 ASP.NET 页面,其中包含一个名为 txbUserName 的多行文本框。然后我将 3 个名称粘贴到文本框中,它们是垂直对齐的:
- 杰森
- 艾米
- 卡伦
每当我检测到回车或换行时,我希望能够以某种方式获取名称并将它们拆分为单独的字符串。我在想一个数组可能是要走的路。 有什么想法吗?
谢谢。
【问题讨论】:
标签: c# text-manipulation
我有一个 ASP.NET 页面,其中包含一个名为 txbUserName 的多行文本框。然后我将 3 个名称粘贴到文本框中,它们是垂直对齐的:
每当我检测到回车或换行时,我希望能够以某种方式获取名称并将它们拆分为单独的字符串。我在想一个数组可能是要走的路。 有什么想法吗?
谢谢。
【问题讨论】:
标签: c# text-manipulation
string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
这涵盖了 \n 和 \r\n 换行符类型,并删除了用户可能输入的任何空行。
我使用以下代码进行了测试:
string test = "PersonA\nPersonB\r\nPersonC\n";
string[] result = test.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in result)
Console.WriteLine(s);
它工作正常,分成三个字符串数组,其中包含条目“PersonA”、“PersonB”和“PersonC”。
【讨论】:
string[] result = input.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
将任何\r\n 替换为\n,然后使用\n 拆分:
string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray());
【讨论】:
new char[] { '\n' }?
Split('\n'),因为分隔符数组是params 参数。
看一下 String.Split 函数(不确定确切的语法,我面前没有 IDE)。
string[] names = txbUserName.Text.Split(Environment.Newline);
【讨论】:
mystring.Split(new Char[] { '\n' })
【讨论】:
using System.Text;
using System.Text.RegularExpressions;
protected void btnAction_Click(object sender, EventArgs e)
{
string value = txtDetails.Text;
char[] delimiter = new char[] { ';','[' };
string[] parts = value.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < parts.Length; i++)
{
txtFName.Text = parts[0].ToString();
txtLName.Text = parts[1].ToString();
txtAge.Text = parts[2].ToString();
txtDob.Text = parts[3].ToString();
}
}
【讨论】:
试试这个:
message.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
适用于:
var message = "test 1\r\ntest 2";
或者
var message = "test 1\ntest 2";
或者
var message = "test 1\rtest 2";
【讨论】:
这取决于你想做什么。另一种选择是使用StringReader 类并使用枚举器,这对于小列表可能有点过分,但对于较大的字符串可能更节省内存:
IEnumerable<string> GetNextString(string input)
{
using (var sr = new StringReader(input))
{
string s;
while ((s = sr.ReadLine()) != null)
{
yield return s;
}
}
}
这支持\n 和\r\n 行尾。当它返回 IEnumerable 时,您可以使用 foreach 处理它,或使用任何标准 linq 扩展(ToList()、ToArray()、Where 等)。
例如,foreach:
var ss = "Hello\nworld\r\ntwo bags\r\nsugar";
foreach (var s in GetNextString(ss))
{
Console.WriteLine("==> {0}", s);
}
【讨论】: