【问题标题】:How to concatenate a character to a string?如何将一个字符连接到一个字符串?
【发布时间】:2016-01-17 01:45:54
【问题描述】:

我正在尝试使用随机生成器编写一个创建随机单词的程序。但是如何将随机生成器生成的字符添加到字符串中? “a:z”对吗?或者如何告诉生成器使用 a 和 z 之间的所有数字

public class StringTraining extends ConsoleProgram {
public void run() {
    String s1 = null;
    randomChar();
    s1.concat(randomChar());
    println(s1);
}

private String randomChar() {
    String word = rgen.nextBoolean() ? "a" : "z";
    return word;
}

【问题讨论】:

  • 使用随机布尔生成器对所有 26 个字母进行编码比使用随机双精度生成器更难实现(假设字符要均匀分布)。不,“a”..“z” 实现不正确,现在你得到“a”或“z”。

标签: java eclipse string char concatenation


【解决方案1】:

Java Strings 是不可变的,因此您不能以任何方式修改字符串。 s1.concat(...) 返回一个新的 String 对象。如果需要,您可以执行s1=s1.concat(...) 之类的操作,或者如果您需要一些性能,可以使用实现可变字符串的StringBuffer 类。

【讨论】:

    【解决方案2】:
    (condition) ? ifTrue : ifFalse
    

    这就是你的方法正在做的事情。你是说“如果我们生成一个真实的陈述,我们使用 a,如果我们生成一个错误的陈述,我们使用 z。”

    听起来您想在 a 到 z 的范围内使用随机字符。最干净的方法可能是使用字符并从一个范围内生成一个数字。

    字符在内部的行为与整数几乎相同,您可以在其中添加它们以递增可能的字符。因此,您只想在“a”到“z”范围内生成一个字符。我接触java已经有一段时间了,所以我不知道是否有一种简单的方法可以做到这一点。但是,如果您想以稍微杂乱的方式查找为您执行此操作的库,您可以从 'a' 开始并生成 0 到 25(含)之间的随机数并将结果添加到 'a '。例如,'a' + 1 将返回 'b'。

    然后只需将该字符附加到您的单词中即可!

    注意:字符和字符串是不同的。此逻辑不适用于字符串。您需要使用单引号而不是双引号将“a”初始化为字符。

    【讨论】:

      【解决方案3】:

      我今天确实是为了好玩而做这件事,作为一种学习体验。也许其他人可以给出比我更优雅的答案,但我就是这样做的。

      public static String getString(){
      
          char[] result = new char[10];
      
          for(int a=0; a<result.length; a++){
              result[a] = getLetter(); 
          }
      
          return new String(result);
      }
      
      public static char getLetter(){
      
          boolean case = true;
          if((1 + (Math.random() * 2) == 2){
              case = false;
          }        
      
          if(case){
              switch((int) (1 + (Math.random() * 26))){
      
                  case 1:
                      return 'a';
                  case 2:
                      return 'b';
                  case 3:
                      return 'c';
                  case 4:
                      return 'd';
                  case 5:
                      return 'e';
                  case 6:
                      return 'f';
                  case 7:
                      return 'g';
                  case 8:
                      return 'h';
                  case 9:
                      return 'i';
                  case 10:
                      return 'j';
                  case 11:
                      return 'k';
                  case 12:
                      return 'l';
                  case 13:
                      return 'm';
                  case 14:
                      return 'n';
                  case 15:
                      return 'o';
                  case 16:
                      return 'p';
                  case 17:
                      return 'q';
                  case 18:
                      return 'r';
                  case 19:
                      return 's';
                  case 20:
                      return 't';
                  case 21:
                      return 'u';
                  case 22:
                      return 'v';
                  case 23:
                      return 'w';
                  case 24:
                      return 'x';
                  case 25:
                      return 'y';
                  case 26:
                      return 'z';
      
              }
          }else{
              switch((int)(1 + (Math.random() * 26))){
      
                  case 1:
                      return 'A';
                  case 2:
                      return 'B';
                  case 3:
                      return 'C';
                  case 4:
                      return 'D';
                  case 5:
                      return 'E';
                  case 6:
                      return 'F';
                  case 7:
                      return 'G';
                  case 8:
                      return 'H';
                  case 9:
                      return 'I';
                  case 10:
                      return 'J';
                  case 11:
                      return 'K';
                  case 12:
                      return 'L';
                  case 13:
                      return 'M';
                  case 14:
                      return 'N';
                  case 15:
                      return 'O';
                  case 16:
                      return 'P';
                  case 17:
                      return 'Q';
                  case 18:
                      return 'R';
                  case 19:
                      return 'S';
                  case 20:
                      return 'T';
                  case 21:
                      return 'U';
                  case 22:
                      return 'V';
                  case 23:
                      return 'W';
                  case 24:
                      return 'X';
                  case 25:
                      return 'Y';
                  case 26:
                      return 'Z';
              }
          }
          return '\0';
      }
      

      【讨论】:

      • 我刚刚提供的答案更优雅一点。你绝对是在正确的轨道上!字符的好处是您可以通过添加整数来增加它们,因为在内部,字符只是一个美化的 int。所以像 'a' + 1 这样的东西会返回 'b'。因此,您只需将 int 范围转换为 0 到 25 而不是 1 到 26,然后将结果添加到字符“a”。使用 java 库可能还有一些更优雅的东西,但是如果你的目标是自学,那么自己实现它是很棒的 =)
      猜你喜欢
      • 2022-12-17
      • 2011-06-17
      • 2013-05-15
      • 2015-05-02
      • 2022-06-17
      • 2016-10-19
      • 2012-02-02
      • 2014-02-25
      • 2017-01-17
      相关资源
      最近更新 更多