我看到我的字符串是使用Visual Studio对象查看器:
"_profileIconId = 5\n elo"
我需要从开头到换行符的位置获取文本。
这是我尝试过的,但是IndexOf()方法返回-1,意味着找不到换行符。
var stringEx = "_profileIconId = 5\n elo";
var x = stringEx.IndexOf(Environment.NewLine);
stat.Name = tempName.Substring(0,x);
关于如何实现这一目标的任何想法?
答案 0 :(得分:15)
这是因为Environment.NewLine
表示\r\n
(回车符+换行符),而您的源字符串中只有换行符。将第二行更改为:
var x = stringEx.IndexOf("\n");
答案 1 :(得分:5)
如果你只想要字符串的第一行,你可以这样做:
static string GetFirstLine(string text)
{
using (var reader = new StringReader(text))
{
return reader.ReadLine();
}
}
StringReader
课程为您处理各种换行方案。来自the MSDN documentation:
一条线被定义为一系列 字符后跟换行符 (“\ n”),回车(“\ r”)或a 马车返回后立即 通过换行符(“\ r \ n”)。
当然,如果你不想要构建一个新的StringReader
对象的开销(虽然我怀疑它是那么大),你可以自己实现类似的东西:
static string GetFirstLine(string text)
{
int? newlinePos = GetIndex(text, "\r") ?? GetIndex(text, "\n");
if (newlinePos.HasValue)
{
return text.Substring(0, newlinePos.Value);
}
return text;
}
// Not really necessary -- just a convenience method.
static int? GetIndex(string text, string substr)
{
int index = text.IndexOf(substr);
return index >= 0 ? (int?)index : null;
}
答案 2 :(得分:1)
答案 3 :(得分:0)
这是执行此操作的一般方法,从字符串中删除一个新行及其后的所有内容,但仅当字符串中存在新行时才会这样做:
int x = stringEx.IndexOf("\n");
if (x > 0) {
stringEx= stringEx.Remove(x);
}