精华内容
下载资源
问答
  • Java字符串:toCharArray() 方法

    千次阅读 2019-11-04 09:28:43
    Java toCharArray() 方法 toCharArray() 方法将字符串转换为字符数组。 语法 public char[] toCharArray() 参数 无 返回值 字符数组。 public class Test { public static void main(String args[]) { String ...

    Java toCharArray() 方法

    toCharArray() 方法将字符串转换为字符数组。

    语法

    public char[] toCharArray()
    

    参数

    返回值

    • 字符数组。
    public class Test {
        public static void main(String args[]) {
            String Str = new String("https://blog.csdn.net/Mrs_chens");
    
            System.out.print("返回值 :" );
            System.out.println( Str.toCharArray() );
        }
    }
    

    以上程序执行结果为:

    返回值 :https://blog.csdn.net/Mrs_chens
    
    展开全文
  • toCharArray()这个方法将String的每个字符按照顺序放在一个char[]数组中返回,特别实用。 虽然我们可用String自带的indexOf(int[] index)方法来遍历每个字符元素,但是对于习惯使用数组操作的同学来说,总感觉差了点...

    String类的toCharArray方法【源码赏析】

    每一篇文章都属于作者的劳动成果,尊重原创!尊重知识!从我做起。禁止一切形式的转载、抄袭、高相似度抄袭、借鉴,谢谢合作。

    java源码赏析专栏会选取JDK1.8 、JDK11、JDK15的源码进行对比,比较每个jdk版本所作的改进,以及每份源码的设计理念。

    碎碎念

    String是java中处理字符串的有力“兵器”类,我们需要对这个被反复使用的类仔细研究,才能榨干每个工具的价值,才能学会更高超的编程技巧。
    toCharArray()这个方法将String的每个字符按照顺序放在一个char[]数组中返回,特别实用。
    虽然我们可用String自带的indexOf(int[] index)方法来遍历每个字符元素,但是对于习惯使用数组操作的同学来说,总感觉差了点感觉;如果能将字符串的每个字符串放入数组中遍历处理就更得心应手了,因此才有了toCharArray()方法。
    看过一点String源码的同学都知道,String的每个char元素是存放在一个final修饰的char[]数组中的,所以char[] toCharArray()方法逻辑就更好处理了。下面来看看吧。

    jdk 1.8

    源码

    /**
         * Converts this string to a new character array.
         *
         * @return  a newly allocated character array whose length is the length
         *          of this string and whose contents are initialized to contain
         *          the character sequence represented by this string.
         */
        public char[] toCharArray() {
            // Cannot use Arrays.copyOf because of class initialization order issues
            char result[] = new char[value.length];
            System.arraycopy(value, 0, result, 0, value.length);
            return result;
        }
    

    赏析

    1.8版本中的实现很简单,就是将String中存储char序列(字符序列)的char数组(char[])直接复制给一个新的char数组,其实这个value就是被private final char[]修饰的那个存储字符序列的成员变量;然后返回。这个返回的数组result是完全全新的,意味着你可以对返回的数组任意操作,与String中的char数组没有关联。

    我们注意到方法的开头有一个注释,意思是用Sytem.arraycopy()而没有用Array.copyOf()进行复制数组操作,是因为会有类初始化的顺序问题。我的理解是在JVM启动的时候是需要使用到String的toCharArray()方法的,此时可能还没有把Array这个类初始化(类加载到堆内存之类的)但是System这个类已经初始化了。以后碰到在深究此问题。

    jdk 11、jdk 15

    源码

    /**
         * Converts this string to a new character array.
         *
         * @return  a newly allocated character array whose length is the length
         *          of this string and whose contents are initialized to contain
         *          the character sequence represented by this string.
         */
        public char[] toCharArray() {
            return isLatin1() ? StringLatin1.toChars(value)
                              : StringUTF16.toChars(value);
        }
    
    	private boolean isLatin1() {
            return COMPACT_STRINGS && coder == LATIN1;
        }
    	/**
         * If String compaction is disabled, the bytes in {@code value} are
         * always encoded in UTF16.
         *
         * For methods with several possible implementation paths, when String
         * compaction is disabled, only one code path is taken.
         *
         * The instance field value is generally opaque to optimizing JIT
         * compilers. Therefore, in performance-sensitive place, an explicit
         * check of the static boolean {@code COMPACT_STRINGS} is done first
         * before checking the {@code coder} field since the static boolean
         * {@code COMPACT_STRINGS} would be constant folded away by an
         * optimizing JIT compiler. The idioms for these cases are as follows.
         *
         * For code such as:
         *
         *    if (coder == LATIN1) { ... }
         *
         * can be written more optimally as
         *
         *    if (coder() == LATIN1) { ... }
         *
         * or:
         *
         *    if (COMPACT_STRINGS && coder == LATIN1) { ... }
         *
         * An optimizing JIT compiler can fold the above conditional as:
         *
         *    COMPACT_STRINGS == true  => if (coder == LATIN1) { ... }
         *    COMPACT_STRINGS == false => if (false)           { ... }
         *
         * @implNote
         * The actual value for this field is injected by JVM. The static
         * initialization block is used to set the value here to communicate
         * that this static final field is not statically foldable, and to
         * avoid any possible circular dependency during vm initialization.
         */
        static final boolean COMPACT_STRINGS;
        
    	static {
            COMPACT_STRINGS = true;
        }
        /**
         * The identifier of the encoding used to encode the bytes in
         * {@code value}. The supported values in this implementation are
         *
         * LATIN1
         * UTF16
         *
         * @implNote This field is trusted by the VM, and is a subject to
         * constant folding if String instance is constant. Overwriting this
         * field after construction will cause problems.
         */
        private final byte coder;
        @Native static final byte LATIN1 = 0;
        @Native static final byte UTF16  = 1;
    

    赏析

    特别需要注意的是jdk11之后String类中的value类型由char[]变成了byte[]

    /**
         * The value is used for character storage.
         *
         * @implNote This field is trusted by the VM, and is a subject to
         * constant folding if String instance is constant. Overwriting this
         * field after construction will cause problems.
         *
         * Additionally, it is marked with {@link Stable} to trust the contents
         * of the array. No other facility in JDK provides this functionality (yet).
         * {@link Stable} is safe here, because value is never null.
         */
        @Stable
        private final byte[] value;
    

    jdk11与jdk15对这个方法都是相同的实现,我们来看下相对与jdk1.8,都做了哪些优化。

    其实首先是分了两种编码方式:LATIN1和UTF16;它是怎么判断采用的那种编码呢?

    首先是检查COMPACT_STRINGS这个布尔常量,为true则代表char[]中的字节被压缩过,就是有可能是LATIN1这种编码,否则就是UTF16这种形式的编码。compaction有压缩的意思。

    COMPACT_STRINGS在类加载时会进行初始化,就是那个静态代码块,会自动置为true,也可以通过JVM进行注入的方式来更改(我自己的理解)。

    当COMPACT_STRINGS为true时,还需要判断coder == LATIN1是否为true,LATIN1一开始就被初始化为0,而coder会在类构造方法中被赋值,会根据实际情况被赋予0或1,由于coder被final修饰,所以不可修改值。

    总之就是会根据String对象设定的编码格式(LATIN1或者UTF16来分别调用两个工具类的复制算法)。下节我们继续讲解这个StringLatin1.toChars(char[] value)方法和StringUTF16.toChars(char[] value)方法。

    value是被private final char[]修饰的那个存储String对象中字符序列的成员变量

    展开全文
  • toCharArray的用法

    千次阅读 2020-02-06 19:24:58
    toCharArray()的用法:将字符串对象中的字符转换为一个字符数组 列如: public class ToCharArray { public static void main(String[] args) { String str=“sfsf”; char arr[]=str.toCharArray(); System.out....

    toCharArray()的用法:将字符串对象中的字符转换为一个字符数组
    列如:
    public class ToCharArray {
    public static void main(String[] args) {
    String str=“sfsf”;
    char arr[]=str.toCharArray();
    System.out.println(arr);
    }
    }
    输出结果:
    sfsf

    展开全文
  • 作用:该方法的作用是返回一个...Char[ ] C=S1.toCharArray( ); —C=[‘我’,‘爱’ ,‘中’, ‘国’] System.println(C.length) ----输出4 System.println© ----输出 我爱中国 System.println(C[0]) ----输出 我 ...

    作用:该方法的作用是返回一个字符数组,该字符数组中存放了当前字符串中的所有字符。

    举例:
    String S1=new String(“我爱中国”)
    Char[ ] C=S1.toCharArray( ); —C=[‘我’,‘爱’ ,‘中’, ‘国’]
    System.println(C.length) ----输出4
    System.println© ----输出 我爱中国
    System.println(C[0]) ----输出 我

    展开全文
  • public char[] toCharArray() 括号内没有参数 返回值是一个字符数组接收 1.函数代码: String b="ss123456"; char []c=b.toCharArray(); System.out.println(b); System.out.println(b.toCharArray()); System.out....
  • CharArrayWriter类的toCharArray()方法 (CharArrayWriter Class toCharArray() method) toCharArray() method is available in java.io package. toCharArray()方法在java.io包中可用。 toCharArray() method is ...
  • 1.charAt(index)方法 charAt(index):获取字符串中索引下标为index的元素。 以下用程序举例说明: String str = "abcdefg"; ...toCharArray():将字符串对象转换为字符数组(将字符串中的值依次循环
  • C#String.ToCharArray()方法 (C# String.ToCharArray() Method) String.ToCharArray() method is used to get the character array of a string, it copies the characters of a this string to a Unicode ...
  • 字符串要进行比较,先要用toCharArray()函数转化为字符数组。
  • java中的toCharArray()方法

    千次阅读 2020-10-22 21:00:23
    toCharArray() 方法将字符串转换为字符数组 返回值为字符数组 public class Test { public static void main(String args[]) { String Str = new String("www.runoob.com"); System.out.print("返回值 :" ); ...
  • 方法一,先 toCharArray() 转成字符数组,然后利用字符数组遍历 方法二,直接使用 String 自带的 charAt(int index) 方法来遍历 但是当我们刷 leetcode 时候会发现第一种方法比第二种方法效率要高的,这是为什么呢...
  • toCharArray() 方法将字符串转换为字符数组。 charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1 public static void main(String[] args) { String a = "abcde"; String b = "abcdefg"; /...
  • 获取字符数组--toCharArray方法

    千次阅读 2018-02-24 16:27:08
    public class GetCharArry { public static void main(String[] args) { // TODO Auto-generated method stub String a = "... char ch[] =a.toCharArray(); for (char tmp:ch) { S...
  • Java toCharArray()方法

    千次阅读 2020-03-01 14:02:08
    关于toCharArray(); 是一个将字符串转化为字符数组的方法。 ————————————————分割————————————————— 示例 String a = new String("Mustang"); char []b = a.toCharArray(); ...
  • } public static String sort(String s){ char ss[] = s.toCharArray();//利用toCharArray方法转换 字符串转字符数组 Arrays.sort(ss); String str = String.valueOf(ss); //字符数组转字符串 这个方法就是把后面的...
  • 目的:想要使用 String 类的 toCharArray() 方法,且数组长度大于字符串的长度 String s = "123456789"; System.out.println("s.length() : " + s.length()); char[] str = new char[s.length() + 1]; int ...
  • toCharArray()

    千次阅读 2018-03-18 18:56:45
    public char[] toCharArray() 该方法的作用是返回一个字符数组,该字符数组中存放了当前字符串中的所有字符Length():public int length()//求字符串长度,返回字符串长度charAt() : public char charAt(int index)...
  • Cannot resolve method ‘toCharArray’ in ‘String’ String类中竟然没有了toCharArray方法,怎么回事啊,后面发现是导包的问题。 把这个删除走就可以了。
  • ToCharArray()的用法

    万次阅读 多人点赞 2018-12-24 01:05:57
    ToCharArray( )的用法,将字符串对象中的字符转换为一个字符数组。 详解释就是: 字符串转换成字符数组后,每个字符的ASC码与字符T的ASC码进行二进制异或运算。 最后把结果转换回字符。 举例说明: public class ...
  • toCharArray()方法

    千次阅读 2019-03-10 16:03:26
    将字符串对象中的字符转换为一个字符数组。
  • getBytes()和toCharArray()

    2020-02-13 21:23:51
    String类的: byte[] getBytes() 返回的是字节数组,直接输出结果是地址值 char[] toCharArray() 返回的是字符数组,直接输出结果却是内容,因为字符数组是特殊的数组 ...
  • charAt、toCharArray

    2020-02-06 12:09:23
    charAt(int index)方法是一个能够用来检索特定索引下的字符的String实例的方法。 charAt()方法返回指定索引位置的char值。索引范围为0~length()-1。...String类有一个方法toCharArray(),它返回一个ch...
  • 1.split() 方法  根据你的需要,以特定的分隔符返回一个下标从0开始的字符串数组 如:String str1 = "90-01-06";  String [] str2 = str1.split('-');...2.toCharArray() 方法 ...
  • ToCharArray( ) 将字符串对象中的字符转换为一个字符数组。 详解释就是: 字符串转换成字符数组后,每个字符的ASC码与字符T的ASC码进行二进制异或运算。 最后把结果转换回字符。 举例说明: public class Test { ...
  • toCharArray ( ) ; //定义第一个没第一次比较 String str1 = "a" ; //有for循环 for ( int i = 1 ; i < ch . length ; i ++ ) { //进行比较相同的就不赋值,反之就赋值 if ( ch [ i ] != ch ...
  • toCharArray()用法

    千次阅读 2018-03-30 20:58:13
    将字符串转换为字符数组public class Main { public static void main(String[] args) { String s1 = "... char [] ch = s1.toCharArray(); System.out.println(ch);//This System.out.println(ch[1]);//h } }...
  • String类中toCharArray()方法的用法
  • toCharArray()和 split()方法

    千次阅读 2018-04-16 14:18:35
    String.toCharArray 方法,作用:将字符串转换为字符数组。Split函数是编程语言中使用的函数,是指返回一个下标从零开始的一维数组,它包含指定数目的子字符串。Split和ToCharArray的区别:(1)split是根据你需要...
  • for(char c:str.toCharArray())

    千次阅读 2020-03-12 16:01:37
    这个和foreach的for循环一样的,也就是遍历 这里的for(char c:chars)就是定义一个遍历字符c,让它分别等于字符串数组chars里面的各个字符,然后执行下面的语句,当c被赋值为chars里面所有字符各一次后,就会退出这个...
  • char[] strch = str.ToCharArray(); for (int i = 0; i ; i++) Console.Write(strch[i] + " "); Console.ReadKey(); } } }   result i a m a s t u d e n t   resource [文档] docs.microsoft....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 144,464
精华内容 57,785
关键字:

tochararray