将字符串的一个子集先拆分再合并

8

我有一个输入字符串如下:

thumb_634735515600845357tchayat_november_200612.jpg

我想做的是先通过_将此字符串进行拆分。然后取位置1到n的结果令其合并
具体来说,针对我的样本输入,这是我期望的输出。如您所见,thumb_已从字符串前面删除:
634735515600845357tchayat_november_200612.jpg

我知道如何拆分字符串,但如何进行接下来的连接步骤呢?我确实可以使用for循环进行拼接。但是否有更好的方法?我不能使用子字符串方法来做连接步骤,因为thumb_之前还有其他数据。 最后,请注意,紧随thumb之后的_字符始终是第一个出现的_
6个回答

12

因为拇指后面的_总是第一个实例,所以IndexOfSubstring结合使用应该是可行的。

string newString = myString.Substring(myString.IndexOf("_") + 1);

这应该取得紧接着第一个_字符之后的子字符串。

如果您希望获得第二个_的索引,我建议您这样做:

int first = myString.IndexOf("_");
int second = mystring.Substring(first).IndexOf("_");

参见这个回答,由Jon Skeet在问题"Index of the nth occurrence of a string?"中提供了此方法的支持。


自从C#8和Range Structs的引入,建议的第一行代码格式现在应该是myString[(myString.IndexOf("_") + 1)..]。 - Haighstrom

7
如果您不喜欢使用indexOf,而想要使用Join:
String.Join("_",
   "thumb_634735515600845357tchayat_november_200612.jpg"
   .Split('_')
   .Skip(1)
   .ToArray())

+1:如果由于某些原因IndexOf不可用,我喜欢这个方法。它比IndexOf解决方案更加“健谈”,但是是一个非常好的替代方法。 - Joel Etherton
1
结果中不会添加下划线,如634735515600845357tchayatnovember200612.jpg。 - Niranjan Singh
实际上你是对的。这是这个结果,但不是我真正想要的。 - DarthVader

2

分割和重新排列后,您可以使用Join方法。

string new_value=String.Join("",your_array);

0

原帖发布于2015年8月31日。我唯一更改的是标记语法,因为原始语法有误。

正则表达式的使用可以非常有帮助。

using System.Text.RegularExpressions;

string itemName = "thumb_634735515600845357tchayat_november_200612.jpg";
itemName = Regex.Match(itemName, @"(?<=(_)).*$").Value;

"

(?<=(_))" 是在第一个下划线后面查找。可以将其视为起点。".*$" 获取从起点到行末的所有内容。"$" 标记了行末。

"

0

你可以使用String.Join,但实际上它仍然在内部使用循环。

String.Join("_", "thumb_634735515600845357tchayat_november_200612.jpg".Split('_').Skip(1).ToArray());

为什么你有1和3?如果你有更多呢? - DarthVader
@DarthVader 是的,你说得对。应该使用 Skip。我会编辑我的答案。 - Kirin Yao
@DarthVader 你的意思是在“thumb”之前还有更多的“_”吗? - Kirin Yao

0

UserRoles 是字符串列表:

string.Join(",", userRoles.ToArray());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接