【问题标题】:Ways to convert String to char in java without built-in libs在没有内置库的情况下在 java 中将 String 转换为 char 的方法
【发布时间】:2013-08-09 10:20:11
【问题描述】:

有没有一种方法可以将字符串转换为 char 数组,而无需在 java 中使用任何库函数(例如:split、tocharArray 等)

【问题讨论】:

  • 当您有现有的 API 时,为什么您更喜欢手动操作?
  • 定义“库函数”。如果不使用它的方法,就无法访​​问String 的内容,这些方法都是 Java 库的一部分。
  • 重新发明轮子?
  • 是的,有办法做到这一点......但是:为什么?家庭作业? ;-)
  • 在这种情况下,在您的字符串上运行一个循环以手动将所有字符读入 char[]。使用 String.charAt(int) 从字符串中获取单个字符。

标签: java string char


【解决方案1】:
String str = "abcd";
char[] arr = str.toCharArray(); // What is the wrong with this way

你可以手动构造一个char数组。

String str = "abcd";
char[] arr = new char[str.length()];
for (int i = 0; i < str.length(); i++) {
    arr[i] = str.charAt(i);
}

【讨论】:

  • charAt 是一个库函数,对吧?它这样做:return value[index + offset];
  • Y 他说“不使用任何库函数
  • 在这种情况下,你甚至不能使用 String.length() 因为它是库函数。您是否期望执行低级操作来获取 char[]?
  • 我只是说如果String.length() 没问题,那么toCharArray() 也应该这样:p
【解决方案2】:

一个小方法(),

public Character[] toCharacterArray(String s) {
   if (s == null) {
     return null;
   }
   Character[] array = new Characer[s.length()];
   for (int i = 0; i < s.length(); i++) {
      array[i] = new Character(s.charAt(i));
   }

   return array;
}

【讨论】:

  • 感谢@Keyser。如果 s[i] 工作,将它转换为另一个数组需要什么:O。因为 s 本身就是一个数组。
【解决方案3】:

这可以通过使用java.io.StringReader来实现

这是一个小sn-p:

public static void main(String[] args)
{
    try
    {
        String s = "hello world";

        StringReader reader = new StringReader(s);

        char[] cc = new char[1];
        cc[0] = (char) reader.read();

        char[] tmpCC = null;

        int readChar = 0;
        int lenConcatenator = cc.length;
        while((readChar = reader.read())!=-1)
        {
            ++lenConcatenator;
            tmpCC = new char[cc.length];
            System.arraycopy(cc, 0, tmpCC, 0, cc.length);

            cc = new char[lenConcatenator];
            System.arraycopy(tmpCC, 0, cc, 0, tmpCC.length);

            cc[lenConcatenator - 1] = (char) readChar;
        }

        System.out.println(cc);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

【讨论】:

    【解决方案4】:
    public static char[] toMyArray(String s) {
        StringReader reader = new StringReader(s);
        int k = 0;
        int i = 0;
        char[] output = new char[s.length()];
        try {
            while ((k = reader.read()) != -1) {
                output[i] = ((char) k);
                i++;
            }
        } catch (Exception e) {
    
        }
        return output;
    }
    

    【讨论】:

    • 你能在这个代码中添加一些解释吗?
    • 是的,Java 有一个 StringReader 类,用于从字符串中读取字符流。如果没有读取任何字符,它的 read() 方法返回 -1,所以我用它来检查它是否是字符串的结尾。我已将字符一一存储在 char 数组中,并在读取整个字符串字符后,返回该数组。
    【解决方案5】:

    使用toCharArray(),它是字符串库。这个库可以替换为java.lang.String 类中的实际实现。 如果没有这个,如果我们可以实现请提出建议。

    import java.util.Scanner;
    
    public class ReverseStringWOInbuilt {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            char[] ch = sc.nextLine().toCharArray();
            char temp;  
            for (int i = 0, j = ch.length-1; i < j; i++, j--) {
                temp = ch[i];
                ch[i] = ch[j];
                ch[j] = temp;
            }
            System.out.println(new String(ch));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 2013-04-13
      • 2011-12-14
      • 2021-04-12
      • 2015-11-19
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多