首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在[]之间的某个位置获取字符串中的文本

在[]之间的某个位置获取字符串中的文本
EN

Stack Overflow用户
提问于 2020-07-07 17:49:54
回答 1查看 55关注 0票数 0

我正在做一个吉他图表在WPF和我想显示相应的和弦鼠标悬停。(在一个信息箱里可以)

我已经在一个名为: cursorPos的Int中有我的光标位置,它返回字符串中悬浮字母位置的编号。

我的问题是我需要整体和弦之间

我的字符串看起来如下:string myString = "[Em] I've been a m[C]iner for a h[D]eart of g[G]old."

在这种情况下,一个19,20或21的"cursorPos“会给我C

顺便说一句。和弦可以有从1到10字母(如G#m9(maj7))

EN

回答 1

Stack Overflow用户

发布于 2020-07-07 19:07:54

首先,您需要找到所有和弦的实例(即字符串中的[]之间的子字符串)。有很多种方法可以做到这一点,这就是一个适合你的情况的例子。当然,这是假设您没有嵌套括号。

首先,我用一个类来保存你们的每个和弦。IsInRange()方法将告诉您chord是否在您传递给它的光标位置。

代码语言:javascript
复制
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;
    }
}

现在,让我们编写一个函数来提取字符串中的所有和弦。

代码语言:javascript
复制
static List<Chord> GetChords(string str)
{
    var chords = new List<Chord>();

    var chord = new Chord();
    var count = 0;
    foreach (var ch in str)
    {
        if (ch == '[')
        {
            chord = new Chord
            {
                Start = count
            };
            chord.Value += ch;
        }
        else if (ch == ']')
        {
            chord.End = count;
            chord.Value += ch;
            chords.Add(new Chord() { Value = chord.Value, Start = chord.Start, End = chord.End });
            chord = null;
        }
        else
        {
            if (chord != null)
                chord.Value += ch;
        }

        count++;
    }

    return chords;
}

现在,您可以传递任何字符串并得到和弦,并使用IsInRange()函数检查给定的光标位置是否与和弦相对应。

代码语言:javascript
复制
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);

让我们看看光标位置19是否返回任何东西。

代码语言:javascript
复制
var chordAt19 = chords.FirstOrDefault(x => x.IsInRange(19));

因为我们在19岁时确实有和弦,所以它会回复它。如果没有(例如,如果我们将12传递给它),它将返回null。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62781107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档