【问题标题】:Use everything before a specific character在特定字符之前使用所有内容
【发布时间】:2018-02-27 18:31:07
【问题描述】:

所以,我一直在学习 C#,我需要删除之后的所有内容 “:”字符。

我使用 StreamReader 读取文本文件,但是我无法使用 Split 函数,然后我尝试使用 int 函数导入它,但又无法使用 Split 函数?

我想要做的是导入一个这样写的文本文件;

姓名:姓氏

姓名2:姓氏2

所以它只显示名称和名称2。 我已经搜索了几天,但我似乎无法弄清楚! 我不知道自己做错了什么以及如何在不使用 StreamReader 或其他任何东西的情况下导入文本文件。

编辑:

我正在尝试向类似的网站发布一些内容;

example.com/q=(名称不带“:”)

编辑 2:

StreamReader list = new StreamReader(@"list.txt");
string reader = list.ReadToEnd();
string[] split = reader.Split(":".ToCharArray());
Console.WriteLine(split);

输出为;

System.String[]

【问题讨论】:

  • 我真的没有例子,我删除了所有我使用的代码。
  • 你看过StreamReader.ReadToEnd吗?这将返回一个字符串,然后您可以使用 Split on。
  • 使用 String.indexOf 和 String.substring
  • 我编辑了它,谢谢你的帮助。它还没有解决。
  • @JeroenVelde 如果每行有 1 个条目,则可以将该行读取为字符串并使用 .Replace(":", " "); 而不是拆分 stackoverflow.com/a/23989887/342740

标签: c# text split streamreader


【解决方案1】:

这里有一些问题。首先,使用File.ReadLines() 而不是StreamReader,它更简单更容易:

IEnumerable<string> lines = File.ReadLines("path/to/file");

接下来,需要迭代您的 lines 变量,以便您可以访问集合的每一行:

foreach (string line in lines)
{
    //TODO: write split logic here
}

然后你必须在':'字符上分割每一行:

string[] split = line.Split(":");

您的split 变量是一个字符串数组(即string[]),这意味着如果您想查看它的值,您必须访问该数组的特定索引。这是您的第二个问题,如果您在后台将split 传递给Console.WriteLine(),它只会在您传递它的对象上调用.ToString(),并且使用string[] 它不会自动为您提供所有值,你必须自己写。

因此,如果您的 line 变量是:"name:Steve",则拆分变量将有两个索引,如下所示:

//split[0] = "name"
//split[1] = "Steve"

我做了一个小提琴here来演示。

【讨论】:

  • 很好地解释了它的每一点!
  • 谢谢,这帮助我解决了这个问题。非常感谢。
【解决方案2】:

我你的文件很小,你的名字:姓氏在一行中使用:

var lines = File.ReadAllLines("filaPath");
foreach (var line in lines)
{
     var array = line.Split(':');
     if (array.Length > 0)
     {
         var name = array[0];
      }
}

如果 name:lastname 不在新行中,请告诉我它是如何分离的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-22
    • 2020-01-06
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 2011-07-16
    • 2013-12-22
    • 2021-08-22
    相关资源
    最近更新 更多