从缓冲文件中解析对象并发送到正确的构造函数时出现问题
Problems parsing in objects from buffered file and sending to the proper constructors
所以我无法解决一个问题,目前正在研究使用缓冲 reader 读取文件的 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() 并从那里开始,或者有更有效的方法。
看来正则表达式应该可以。
Double
与 integer
的浮点数不同,用 /^[0-9]+(\.[0-9]+)?$
测试它,至于注释,这可能会有所帮助:
Regex for matching a music Chord
所以我无法解决一个问题,目前正在研究使用缓冲 reader 读取文件的 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() 并从那里开始,或者有更有效的方法。
看来正则表达式应该可以。
Double
与 integer
的浮点数不同,用 /^[0-9]+(\.[0-9]+)?$
测试它,至于注释,这可能会有所帮助:
Regex for matching a music Chord