处理:如何让9成为10?

时间:2014-09-12 02:15:53

标签: processing

我是一名大吉他手,我正在尝试学习我最喜欢的乐队Rise Against的每首歌。问题是,有些歌曲是标准调音的标签,有些是Eb。我不想经常来回走动,所以我想制作一个程序将所有标准歌曲转换成Eb调音。

这是通过简单地为每个音品添加一个来完成的。因此,如果我应该将标准的第一个音品放在和弦上,我会在第二个音符处做。

这是"全部放弃"

的标签
e|---------------|
H|---------------|
G|---------------|
D|-7---3---6---4-|
A|-4---4---4---4-|
E|---------------|

 Verse Part 1 (x2)
e|--------------------------------------|
H|--------------------------------------|
G|--------------7777----------7777-9999-|
D|-44--44--44---7777-44--44---7777-9999-|
A|-44--44--44---5555-44--44---5555-7777-|
E|-22--22--22--------22--22-------------|

Verse Part 2 (x2)
E|--------------------------------------|
H|--------------------------------------|
G|--------------7777----------7777-9999-|
D|-44--44--44---7777-44--44---7777-9999-|
A|-4422442244---5555-44--44---5555-7777-|
E|-2200220022--------22002200-----------|  

Chorus (2x)
E|--------------------------------------------|
H|--------------------------------------------|
G|--------------------------------------------|
D|----------99999999-111111111111111-77777777-|
A|-77777777-77777777-111111111111111-55555555-|
E|-55555555----------9-9-9-9-9-9-9-9----------|

至少这是它的一部分。我的编程老师帮我在Processing:

中完成了这个
  void setup() {
      String lines[] = loadStrings("fretEx1.txt");
      println("there are " + lines.length + " lines");
    for (int i = 0 ; i < lines.length; i++) {

      println(shiftLine(lines[i]));
  }
  System.out.println(Character.isDigit('9'));
}


//Takes a line of tablature (spelling?) and increases all fret number values by 1.
StringBuilder shiftLine(String tab) {
  StringBuilder sb = new StringBuilder(tab);
  for(int i=0; i<sb.length(); i++) {
    char ch = sb.charAt(i);
    if(Character.isDigit(ch) ) {
       ch++;
       sb.setCharAt(i,ch);
    }

  }
  return sb;
}

它可以很好地工作,直到它将9转换为应该是10而不是它放一个冒号。你怎么建议修理这个?另外,我知道还有很多其他问题,但我现在正专注于这个问题。谢谢!

1 个答案:

答案 0 :(得分:3)

你的问题源于10不是一个数字的事实。看看the ascii table。 ascii表后面的字符9是冒号字符。当您为&#39; 9&#39;增加ascii值时,最终会得到&#39;:&#39;。在打印其值之前,需要将ascii字符转换为整数,然后递增。您可能还需要考虑为包含两位数字的数字腾出空间,这样您的标签就不会出现问题。

请注意数字&#39; 0&#39;的ascii值。因此,一个简单的算法(在Java / Processing中)用于将ascii数字字符转换为其整数值:

if (Character.isDigit(someChar)) {
    int value = (int) someChar - 48;
}