我有一个带有多行文本框的ASP.NET页面,名为txbUserName。然后我将3个名称粘贴到文本框中,它们是垂直对齐的:
我希望能够以某种方式获取名称并在检测到回车符或新行时将它们拆分为单独的字符串。我认为阵列可能是要走的路。 有什么想法吗?
谢谢你。答案 0 :(得分:123)
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”。
答案 1 :(得分:7)
将所有\r\n
替换为\n
,然后使用\n
进行拆分:
string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray());
答案 2 :(得分:4)
看一下String.Split函数(不确定语法,在我面前没有IDE)。
string[] names = txbUserName.Text.Split(Environment.Newline);
答案 3 :(得分:1)
mystring.Split(new Char[] { '\n' })
答案 4 :(得分:1)
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();
}
}
答案 5 :(得分:0)
试试这个:
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";
答案 6 :(得分:0)
这取决于您要做什么。另一个选项可能对于小列表来说是过大的,但对于较大的字符串可能会更有效地利用内存,它是使用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);
}