問題:我想撰寫一個方法,它采用這樣的訊息/索引對:
("Hello, I am *Name1, how are you doing *Name2?", 2)
索引是指訊息中以星號分隔的名稱。因此,如果索引為 1,則應參考 *Name1,如果索引為 2,則應參考 *Name2。
該方法應僅回傳帶星號 (*Name2) 的名稱。
我嘗試使用子字串,取第一個分隔的 * 并在我們遇到不是字母、數字、下劃線或連字符的字符時結束,但邏輯并未設定。
我知道這類似于 SO 上的一些問題,但我找不到任何特定的問題。任何幫助表示贊賞。
到目前為止,這是我非常模糊的嘗試所剩下的。基于此執行緒:
public string GetIndexedNames(string message, int index)
{
int strStart = message.IndexOf("@") "@".Length;
int strEnd = message.LastIndexOf(" ");
String result = message.Substring(strStart, strEnd - strStart);
}
uj5u.com熱心網友回復:
如果你想用老派的方式來做,那么像:
public static void Main(string[] args)
{
string message = "Hello, I am *Name1, how are you doing *Name2?";
string name1 = GetIndexedNames(message, "*", 1);
string name2 = GetIndexedNames(message, "*", 2);
Console.WriteLine(message);
Console.WriteLine(name1);
Console.WriteLine(name2);
Console.ReadLine();
}
public static string GetIndexedNames(string message, string singleCharDelimiter, int index)
{
string valid = "abcdefghijlmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-";
string[] parts = message.Split(singleCharDelimiter.ToArray());
if (parts.Length >= index)
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < parts[index].Length; i )
{
string character = parts[index].Substring(i, 1);
if (valid.Contains(character))
{
sb.Append(character);
}
else
{
return sb.ToString();
}
}
return sb.ToString();
}
return "";
}
uj5u.com熱心網友回復:
您可以嘗試使用正則運算式來匹配名稱。假設名稱是一系列單詞字符(字母或數字):
using System.Linq;
using System.Text.RegularExpressions;
...
// Either name with asterisk *Name or null
// index is 1-based
private static ObtainName(string source, int index) => Regex
.Matches(source, @"\*\w ")
.Cast<Match>()
.Select(match => match.Value)
.Distinct() // in case the same name repeats several times
.ElementAtOrDefault(index - 1);
演示:
string name = ObtainName(
"Hello, I am *Name1, how are you doing *Name2?", 2);
Console.Write(name);
結果:
*Name2
uj5u.com熱心網友回復:
也許不是最優雅的解決方案,但如果您想使用IndexOf,請使用回圈:
public static string GetIndexedNames(string message, int index, char marker='*')
{
int lastFound = 0;
for (int i = 0; i < index; i ) {
lastFound = message.IndexOf(marker, lastFound 1);
if (lastFound == -1) return null;
}
var space = message.IndexOf(' ', lastFound);
return space == -1 ? message.Substring(lastFound) : message.Substring(lastFound, space - lastFound);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/368662.html
上一篇:關于回圈的c程式
下一篇:R:未遵守邏輯條件
