2

所以我很难解决一个问题,目前正在使用缓冲阅读器读取文件的midi播放器。我正在将文件中的每个对象作为字符串读取到数组列表中。问题是当文件中可能存在三个不同的潜在对象时,一个音符的频率是双倍的,midi 音符值是一个 int,一个是字母(c4#)中的音符。如何从我构建的 ArrayList 中判断字符串对象中存在哪种类型的对象。

ArrayList<String> noteList = new ArrayList<String>();
Note note;
    String file = JOptionPane.showInputDialog("enter the file name of the song");
    String line;
    try 
    {
        BufferedReader bufread = new BufferedReader(new FileReader("res/"+file));
        while((line = bufread.readLine()) != null)
        {
            String[] result = line.split(",");
            for(String str : result)
            {
                noteList.add(str);
            }
        }
        bufread.close();
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    for(int i=0; i<al.size();i++)
    {
        note = new Note(al.get(i)); //this is where the three constructors should be called
        int midiInteger = note.getMIDIAbsoluteNumber();
    channels[15].noteOn(midiInteger,127);                                
    Thread.sleep(400); 
    channels[15].noteOff(midiInteger,127);
    }

构造函数很简单

    public Note(double frequency)
    {
       frequency = this.frequency;
    }

    public Note(int noteNum)
    {
       noteNum = this.Note;
    }

    public Note(String letterNote)
    {
       letterNote = this.letterNote;
    }

如何区分字符串类型的数组列表中的字符串或双精度对象。我不知道是否应该更改为 ArrayList 并使对象 Note 可序列化或仅测试 ArrayList 元素的 . 或 isLetter() 并从那里开始,或者有更有效的方法。

4

1 回答 1

0

似乎正则表达式应该这样做。 与浮点Double不同,使用它进行测试,对于注释,这可能会有所帮助:integer/^[0-9]+(\\.[0-9]+)?$

用于匹配音乐和弦的正则表达式

于 2015-10-18T19:10:43.883 回答