零基础入门学习java第六节: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常用的方法如下:

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容