l33t为什么打印三个U.

时间:2013-11-24 19:57:42

标签: java

我遇到了一个问题我正在制作一个l33t的翻译,而我的翻译从英语到l33t的工作对我的l33t到英语作品除了你和正在发生的事情是打印三个U我已经尝试把它从for循环,它只打印一个,但它打印它在单词的开头,我尝试将它放在for的底部,它甚至不打印一个。我也试过if(phrase.charAt(i) == '|') && phrase.charAt(i+1) == '_' && phrase.charAt(i+2) == '|').这就是我得到的。

public static String translateToEnglish(String phrase) {
  Scanner scan = new Scanner(System.in);
  System.out.println("Hello what pharse would you like to convert in to l33t");
  phrase = scan.nextLine();
  String NewString = "";

  for (int i = 0; i < phrase.length(); i++) {
    if (phrase.charAt(i) == '4') {
      NewString += "a";
    }

    if (phrase.charAt(i) == '8') {
      NewString += "b";
    } else {
      if (phrase.charAt(i) == '3') {
        NewString += "e";
      }
    }

    if (phrase.charAt(i) == '1') {
      NewString += "l";
    } else {
      if (phrase.charAt(i) == '0') {
        NewString += "o";
      }
    }

    if (phrase.charAt(i) == '5') {
      NewString += "s";
    } else {
      if (phrase.charAt(i) == '7') {
        NewString += "t";
      }
    }

    if (phrase.contains("|_|")) {
      NewString += "u";
    }

    if (phrase.charAt(i) == '2') {
      NewString += "z";
    }

    if (phrase.charAt(i) == 'c' || phrase.charAt(i) == 'd' || phrase.charAt(i) == 'f' || phrase.charAt(i) == 'g'
        || phrase.charAt(i) == 'h' || phrase.charAt(i) == 'i'
        || phrase.charAt(i) == 'j' || phrase.charAt(i) == 'k' || phrase.charAt(i) == 'm' || phrase.charAt(i) == 'n'
        || phrase.charAt(i) == 'p' || phrase.charAt(i) == 'q'
        || phrase.charAt(i) == 'r' || phrase.charAt(i) == 'v' || phrase.charAt(i) == 'w' || phrase.charAt(i) == 'x'
        || phrase.charAt(i) == 'y') {
      NewString += phrase.charAt(i);
    }
    // if (phrase.charAt(i) == 'c') {
  }

  System.out.println(NewString);
  return phrase;
}

2 个答案:

答案 0 :(得分:2)

对于单词中的每个字符,您检查它是否包含“u”。它总是如此,因为你没有检查单词的特定位置。你必须检查一个|然后是_后跟|然后添加一个“u”而不是通常检查它是否在输入中的某个位置。

答案 1 :(得分:0)

您对|_|的if语句正在进行String#contains比较,但未被删除。因此,对于循环中的每次迭代,如果短语包含这个字符序列,它将打印一个u。

如果您使用替代方法检查i,i + 1,i + 2中的每个字符,您首先必须确保您的短语足够长,然后如果确实如此,那么在if语句中您必须确保你增加3即

if(phrase.length() < i+2 
   && phrase.charAt(i) == '|') 
   && phrase.charAt(i+1) == '_' 
   && phrase.charAt(i+2) == '|')
{
    NewString += "u";
    i += 2;  // Will get the third increment from loop
    continue;
}

此外,如果您确保结构始终为if..if else...else,那么最终检查位置只是替换为相同的字符,可以简化为其他而不需要或一起使用其他所有字符