【问题标题】:Converting chars into a string (without array)?将字符转换为字符串(没有数组)?
【发布时间】:2015-01-06 23:48:31
【问题描述】:

我需要将一组字符转换为字符串。问题是,我不知道没有数组怎么办(禁止使用它们,因为我们还没有看到这个主题)。

所以该方法首先要求用户输入一个单词(字符串类型)。在这种情况下,我以“programma”一词为例。第一步是对该单词的每个字符都计数 +4。在此示例中,它必须从“programma”->“tvskveqqe”更改。

我将输入字符串“programma”拆分为单独的字符,并在 alfabet 中添加了 +4。之后我确定是否使用了字母“wxyz”,将它们转换为 w --> a、x -->b、y --> c 和 z --> d。

但现在我被困在了需要将字符 't''v''s''k''v''e''q''q''e' 放入字符串中“tvskveqqe”,并将其用作返回语句。

谢谢!

    public char coderen() {
    String str; //input string
    char c, e = ' ';
    int a = 4, b, d;

    System.out.println("Geef een woord in: "); 
    str = Input.readString(); //input

    for (int i = 0; i < str.length(); i++) { // Splits up the string into separate chars
        b = (int) str.charAt(i) + a; // +4 in ASCII
        c = (char) b;

        if (c >= 'e' && c <= 'z') {
            e = c;
            System.out.println(e);
        }
        else if (c >= '{' && c <= '~') { // converts 'w''x''y''z' into 'a''b''c''d'
            d = (int)c - 26;
            e = (char) d;
            System.out.println(e);
        }
        else {
            System.out.println("fout!");
        }
    }
    return e;
}

【问题讨论】:

  • 处理ij会很有趣。
  • 您可以计算正确的字符,而不是使用 if 和 else: int ascii = (int)str.charAt(i); int 替代Ascii = (ascii - 97 + 4) % 27; //'a'的ASCII值== 97

标签: java string char converter


【解决方案1】:

你有多种方法可以做到这一点。

例如String.concat()

String str = "";
str.concat(new String(myChar));

实际上和做的一样

str += mychar;

但通常这是一种不好的做法,因为Strings are immutable,它们会消耗内存,而您在这里创建了很多。

你可以使用的最好的是StringBuilder

StringBuilder builder = new StringBuilder();
builder.append(myChar1);
builder.append(myChar2);
...
builder.toString();

附带说明一下,如果您使用的是String,那么您实际上是在使用char 数组Stringchar[] 结构的包装类:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
    ...

【讨论】:

    【解决方案2】:

    你不应该使用数组有点奇怪,因为最后一个字符串总是表示为一个字符数组,所以你可以争辩说你应用的任何方法都是“使用数组”......

    话虽如此,你可以尝试不同的东西:

    使用 StringBuilder:

    StringBuilder sb = new StringBuilder();
    for .... { sb.appendChar(c); }
    

    使用字符串连接:

    String result = "";
    for .... { result = result + c; }
    

    使用字符串替换:(但是这不是基于索引,而是基于匹配字符):

    for (char c = 'a'; c <= 'z'; c++) {
        result = result.Replace(c, c + 4);
    }
    

    【讨论】:

      【解决方案3】:

      试试这个。你会明白的。它不使用任何数组。

      public static void main(String[] args) throws Exception {
          char ch = 'a';
          String s = ch + "";
          for (int i=1; i<=10; i++){
              s += (char)(ch + i);
          }
          System.out.println(s);      
      }
      

      但现在我被困在了需要放置字符 't'、'v'、's'、'k'、'v'、'e'、'q'、'q 的地方', 'e' 转换为字符串“tvskveqqe”,并将其用作返回语句。

      您也可以使用ArrayList(前提是您不允许使用数组)。
      然后遍历它并做我上面做的事情。

      【讨论】:

        猜你喜欢
        • 2011-06-18
        • 2017-11-27
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多