【JAVA零基础入门系列】Day6 Java字符串-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

【JAVA零基础入门系列】Day6 Java字符串

简介:   【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出 Day8 Java的控制流程 Day9 Java中的那个大数值 Day10 Java中的数组 Day11 Java中的类和对象 Day12 Java类的简单应用 Day13 Java类的继承与多态 Day14 Java对象的克隆 Day15 对象的比较   字符串,是我们最常用的类型,每个用双引号来表示的串都是一个字符串。

  【JAVA零基础入门系列】(已完结)导航目录

  字符串,是我们最常用的类型,每个用双引号来表示的串都是一个字符串。Java中的字符串是一个预定义的类,跟C++ 一样叫String,而不是Char数组。至于什么叫做类,暂时不做过多介绍,在之后的篇章中会有关于类的详细介绍,在这里,只需要将类理解为一个模具,就像做月饼那样,想要什么外观的月饼,就选用相应的模具一压,再往烤箱里一放,便能得到我们想要的月饼。用同一个模具所做出来的月饼基本是一样的。当然,这个比喻并不十分恰当,不过就目前而已,它是有效的。声明一个String类型的变量之后,这个变量便是String类型的一个实例,就好比模具做出来的月饼,而且能使用String类型的所有方法,也具有了String的所有属性。

  String这个类有一些基本的方法,如取子串,拼接,检测是否相等 等一些常用的API。字符串处理将是我们经常用到的,所以String的熟练使用将是不可或缺的。话不多说,我们直接上代码实操。

  新建项目的方法,我就不再多说了。代码如下:

 1 package pers.frank.test;
 2 
 3 public class Test {
 4     public static void main(String[] args){
 5         String str = "我爱Java!!!";
 6         String str1 = str.substring(0,4);
 7         System.out.println("str1:"+str1);
 8 
 9         String str2 = str + "但我也爱C++。";
10         System.out.println("str2:"+str2);
11 
12         String str3 = "我爱Java!!!";
13         System.out.println(str3.equals(str));
14         System.out.println(str == str3);
15         System.out.println(str.length());
16         System.out.println(str.charAt(0));
17         System.out.println(str.charAt(2));
18         System.out.println(str.charAt(4));
19 
20         String str4 = "我爱JavaScript!!!";
21         System.out.println(str4.substring(0,4) == str1);
22     }
23 }

 

  第5行定义了一个字符串变量str,并给它初始化赋值。第六行,调用了String的substring方法,取了前四个字符,这个方法一共两个参数,第一个参数代表想要取的第一个字符的位置,从0开始,第二个字符代表第一个不想取的字符的位置。所以str.substring(0,4)即取字符串str的前四个字符。

  第9行定义了str2,初始化的时候将str与字符串“但我也爱C++。”用“+”号拼接了起来,组成了新的字符串。

  第12行定义了str3,同样初始化赋值为“我爱Java!!!”,String的equals方法用于判断两个字符串的内容是否相同,因为调用str3.equals(str)时,会返回true,注意,判断两个字符串是否相同时不要使用“==”,虽然在某些情况下,使用等号判断可以顺利执行,但并非所有情况都如此。使用“==”号判断时,判断的是两个字符串变量是否同时指向同一个字符串常量,而不是比较它们的内容。String在这里更像是char*,字符串变量并没有真正存储字符串的内容,而是存储它们在内存中的位置,就像户口登记簿上写的是你家的地址,而不是把你家搬到登记簿里面去。用等号判断的时候,比较的是登记薄上记载的内容是否相同,而用equals方法比较的是两个地址指向的房子是否相同(可以不是同一栋房子)。在Java中,字符串常量都是被单独存放在内存空间的,在声明str和str2的时候,会新建两个字符串常量并存储在内存空间,然后把它们在内存空间的地址赋值给这两个变量。在声明str3的时候,并没有新建新的字符串常量,因为Java编译器会让字符串常量共享,所以实际上str3跟str指向的是同一个地址。这时使用等号来判断两者是否相等时可以得到正确的结果。但并不适用所有情况,如果再声明一个字符串变量str4,赋值为“我爱JavaScript!!!”,再调用substring方法跟str1用等号进行比较时,就不能得到正确的结果了。

  第15行调用的是length方法,返回字符串的长度。

  第16-18行调用charAt方法,返回的是第几个位置上的字符。以下是运行结果:

  

  因为java中的字符串都是Unicode字符,所以这里的字符概念跟某语言中的字符概念不太一样,既然说到了这里,那就顺便再详细的说明一下相关的概念。

  字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。 

  字符集是字符的集合。例如,汉字字符是中国人最先发明的字符,在中文、日文、韩文和越南文的书写中使用。

  编码字符集是一个字符集,它为每一个字符分配一个唯一数字。Unicode 标准的核心是一个编码字符集,字母“A”的编码为 004116 和字符“€”的编码为20AC16.Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,所以“A”的编码书写为“U+0041”。

  代码点是指可用于编码字符集的数字。编码字符集定义一个有效的代码点范围,但是并不一定将字符分配给所有这些代码点。有效的 Unicode 代码点范围是 U+0000 至 U+10FFFF.Unicode 4.0 将字符分配给一百多万个代码点中的 96382 代码点。

  再细说可能就要说到具体的编码上来了,由于不是本篇重点,所以还是不做过多介绍了,之后会有文章专门介绍。

  关于String的方法很多,但常用的并不多,这里不全部介绍,想要了解的话可以在这里查看:http://www.runoob.com/java/java-string.html

  暂时不需要全部记住,只要知道有那么个函数,就可以实现那样的功能就好了,以后的多码代码自然能够记住了。

  最后,再介绍一个叫做StringBuilder的类。这个类是干嘛用的呢?主要用于多字符串的拼接和处理。那你可能会问了,既然用“+”会把两个字符串拼接起来,为啥还要这个类呢?事实上,每次声明一个新字符串变量并赋上初值的时候,如果该字符串常量不存在,则会新建一个字符串常量并存储,就像上面声明str2的时候,会新建一个字符串对象“我爱Java!!!但我也爱C++。”而不是简单的将“但我也爱C++。”加在str后面,而且如果有多次拼接,特别是在循环中使用的时候,这种方式无疑会浪费很多空间,我们需要的只是最后的字符串,而不是过程中间的产生的字符串,所以过程中生成的字符串对象并没有存储的必要,对程序而言便是存储上的浪费,这个时候StringBuilder就产生了,可以调用它的append方法来拼接字符串,这样可以节省很多不必要浪费的空间。

  事实上,如果你有了解过C或者C++的话,对char[]应该比较熟悉,StringBuilder内部便是有一个自己维护的char数组,通过动态申请内存方式进行拼接和处理。

  StringBuilder常用的方法如下:

  同样不需要全部死记硬背,在之后的练习中多加使用便能熟练掌握。

  至此,字符串的讲解告一段落,欢迎大家继续关注!

 

真正重要的东西,用眼睛是看不见的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: