我有*
个字符串,我想要唯一的未知字符及其位置。例如,我想要字符“a
”或“b
”或“c
”或任何(未知)及其在以下字符串中的位置:
1) "******a***" // I want 'a'
2) "b****" // I want 'b'
3) "*******c" // I want 'c'
字符串始终具有*
个字符。有时我会有'a
',有时是'n
',有时是'x
',依此类推。我不知道明星里面有什么角色(*
)。
我如何在C#
中执行此操作?
答案 0 :(得分:2)
试试这个:
// the string
var str = "******a***";
// the character
var chr = str.Single(x => x != '*');
// the position
var pos = str.IndexOf(chr);
请注意,如果找不到任何内容,Single
将抛出异常。仅在您确定存在一个(且仅一个)未知字符时才使用它。如果您不确定使用SingleOrDefault
并检查null
。
答案 1 :(得分:1)
使用正则表达式
public static char GetUnknownChar(string s, char knownChar)
{
const string mask = "[^{0}]";
var match = Regex.Match(s, string.Format(mask, knownChar));
return match.Value[0];
}
使用LINQ:
public static char GetUnknownChar(string s, char knownChar)
{
return s.First(c => c != knownChar);
}
有多个已知字符:
public static char GetUnknownChar(string s, IEnumerable<char> knownChars)
{
var knownSet = new HashSet<char>(knownChars);
return s.First(knownSet.Contains);
}
答案 2 :(得分:0)
您可以使用String.IndexOf获取职位
答案 3 :(得分:0)
这个怎么样:
string foo = "**x*";
char[] knownChars = new char[]{'*','!','?'};
int i = 0;
for (; i < foo.Length; i++)
if (knownChars.Contains(foo[i]))
break;
答案 4 :(得分:0)
这是一种更原始的方式:
public class Program
{
public static void Main(string[] args)
{
FindUnknown("******a***");
FindUnknown("b****");
FindUnknown("*******c");
}
private static void FindUnknown(string myString)
{
var tag = '*';
var unknown = ' ';
var unknownIndex = -1;
var currentIndex = 0;
foreach (var character in myString)
{
if (character != tag)
{
unknown = character;
unknownIndex = currentIndex;
break;
}
currentIndex++;
}
Console.WriteLine(String.Format("Unknown character: {0}", unknown));
Console.WriteLine(String.Format("Unknown character index: {0}", unknownIndex));
}
}
答案 5 :(得分:0)
这是一个相对新颖但易于理解的LINQ解决方案:
var strings = new[] {"******a***", "b****", "*******c"};
foreach (var str in strings)
{
var prefix = str.TakeWhile(c => c.Equals('*'));
var postPrefixIndex = prefix.Count();
var unknownCharacter = str[postPrefixIndex];
Console.WriteLine("{0} at {1}", unknownCharacter, postPrefixIndex);
}
// a at 6
// b at 0
// c at 7
// Press any key to continue . . .