【问题标题】:dynamic substring in c#c#中的动态子字符串
【发布时间】:2023-03-21 01:56:02
【问题描述】:

我在 c# 中有一组代码,我想将用户在文本框中输入的内容存储到数据库中。

用户这样进入文本框

input namexyzpan9837663placeofbirthmumbailocationwadala

这是用户输入的内容

(姓名:xyz pan:9837663 出生地:孟买 所在地:wadala)

输出到数据库

xyz 9837663 孟买瓦达拉

name xyzapan72placeofbirthgoalocationpanji

(>姓名:xyza pan:72出生地:果阿所在地:panji)

输出到数据库

xyza 72 果阿潘吉

姓名、年龄、位置和出生地是静态的,但里面的值 它们是动态的

我知道子字符串很有帮助,但我不知道如何使用它。

【问题讨论】:

  • 姓名、出生地和出生地是静态的吗?
  • name pan placeofbirth and location 对于每个用户来说都是静态的
  • 您的问题格式不正确。请检查:How to Ask 以了解它应该如何制定。到目前为止,您尝试过什么?你被困在哪里了?
  • 您需要分隔符。这不是很好的输入。
  • 使用 4 个文本框更好地包含您的用户,每个文本框用于一个字段。

标签: c# substring


【解决方案1】:

如果关键字是静态的,可以使用Split

string strMain = "namexyzpan9837663placeofbirthmumbailocationwadala";

var results = strMain.Split(new string[] { "name", "pan", "placeofbirth", "location" }, StringSplitOptions.RemoveEmptyEntries);

string name = results[0];
string pan = results[1];
string location = results[2];

你说你不知道如何使用Substring,那么它正在工作:

请注意,此方法的第二个参数是要获取的字符串的长度,而不是要停止的索引。

string strMain = "namexyzpan9837663placeofbirthmumbailocationwadala";

int indexOfName = strMain.IndexOf("name");
int indexOfPan = strMain.IndexOf("pan");
int indexOfBirth = strMain.IndexOf("placeofbirth");
int indexOflocation = strMain.IndexOf("location");

int effectiveIndexOfName = indexOfName + "name".Length;
int effectiveIndexOfPan = indexOfPan + "pan".Length;
int effectiveIndexOfBirth = indexOfBirth + "placeofbirth".Length;
int effectiveIndexOflocation = indexOflocation + "location".Length;

string name1 = strMain.Substring(effectiveIndexOfName, indexOfPan- effectiveIndexOfName);
string pan1 = strMain.Substring(effectiveIndexOfPan, indexOfBirth - effectiveIndexOfPan);
string birth1 = strMain.Substring(effectiveIndexOfBirth, indexOflocation - effectiveIndexOfBirth);
string location1 = strMain.Substring(effectiveIndexOflocation);

namenamepan9837663placeofbirthmumbailocationwadala 使用第二种方法。但是namepanpan9837663placeofbirthmumbailocationwadala 是一个有趣的案例,肯定需要解决方法。

【讨论】:

  • namenamepan9837663placeofbirthmumbailocationwadala?
  • namexyzpan9837663placeofbirthmumbailocationwadala 这是动态的
  • 不工作它总是打印这个 xyz 9837663 mumbai wadala
  • @MumbaiWadala 你在测试什么字符串?
  • string strMain = "namexyzpan9837663placeofbirthmumbailocationwadala"; int indexOfName = strMain.IndexOf("name"); int effectiveIndexOfName = indexOfName + "name".Length; string name1 = strMain.Substring(effectiveIndexOfName, effectiveIndexOfPan - effectiveIndexOfName); Label1.Text = name1.ToString(); 这就是我测试它的方式
【解决方案2】:

正则表达式就是为这种情况设计的。

var input = @"namexyzpan9837663placeofbirthmumbailocationwadala";

var match = Regex.Match(input, @"^\s*"
    + @"name\s*(?<name>\w+?)\s*"
    + @"pan\s*(?<pan>\w+?)\s*"
    + @"placeofbirth\s*(?<placeOfBirth>\w+?)\s*"
    + @"location\s*(?<location>\w+)\s*" + @"$");

var name = match.Groups["name"].Value;
var pan = match.Groups["pan"].Value;
var placeOfBirth = match.Groups["placeOfBirth"].Value;
var location = match.Groups["location"].Value;

【讨论】:

  • 这是什么意思? @"name\s*(?\w+?)\s*"
  • 它是“正则表达式”,可让您匹配任何模式。 '\s*' 表示任何空格,'\w+?'表示任何词。 msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx
  • @Hebele 使用Substring检查以下方法。
  • 因为“位置”不包括在内。您想接受缺少某些字段的文本吗?
  • 小心。那是出生地。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2022-01-08
  • 1970-01-01
  • 2017-08-27
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多