C# 在[]之间的某个位置获取字符串中的文本
我正在用WPF做一个吉他编曲程序,我想在鼠标悬停时显示相应的和弦。(在消息框中即可) 我已经在一个名为:cursorPos的Int中设置了光标位置,它返回字符串中悬停字母位置的编号 我的问题是我需要整个和弦在[和]之间 我的字符串看起来是这样的:C# 在[]之间的某个位置获取字符串中的文本,c#,wpf,C#,Wpf,我正在用WPF做一个吉他编曲程序,我想在鼠标悬停时显示相应的和弦。(在消息框中即可) 我已经在一个名为:cursorPos的Int中设置了光标位置,它返回字符串中悬停字母位置的编号 我的问题是我需要整个和弦在[和]之间 我的字符串看起来是这样的:string myString=“[Em]我已经做了一个很长时间的程序员了。” 在这种情况下,19、20或21的“cursorPos”将给我[C] 顺便说一句,和弦可以有从1到10的字母(如[G#m9(maj7)]首先,您需要找到所有和弦实例(即字符串中
string myString=“[Em]我已经做了一个很长时间的程序员了。”
在这种情况下,19、20或21的“cursorPos”将给我[C]
顺便说一句,和弦可以有从1到10的字母(如[G#m9(maj7)]首先,您需要找到所有和弦实例(即字符串中
[
和]
之间的子串)。有无数种方法可以做到这一点,这是一个这样的例子,适合您的情况。当然,这是假设没有嵌套的括号
首先,我用一个类来控制你的每个和弦。IsInRange()
方法将告诉您和弦是否位于传递给它的光标位置
public class Chord
{
public string Value { get; set; }
public int Start { get; set; }
public int End { get; set; }
public bool IsInRange(int cursorPos)
{
return cursorPos >= Start && cursorPos <= End;
}
}
让我们看看光标位置19是否返回任何内容
var chordAt19 = chords.FirstOrDefault(x => x.IsInRange(19));
因为我们确实有一个19的和弦,它将返回它。
如果没有(例如,如果我们将12传递给它),它将返回null。您尝试了什么?你收到错误了吗?我的第一种方法是回顾和展望标记([和]),通过这些索引,你可以轻松地得到它们之间的任何东西(不管长度),这个解决方案似乎总是返回“GuitarMate.Editor+Chord”,我不知道为什么
string myString = "[Em] I've been a m[C]iner for a h[D]eart of g[G#m9(maj7)]old.";
var chords = GetChords(myString);
var chordAt19 = chords.FirstOrDefault(x => x.IsInRange(19));