14. String

从零开始学Java封面14.jpg

在我们日常的开发中,String 字符串这种数据类型会经常使用,所以我拿出一些篇幅主要来说一说关于String的常用规则。

之前已经介绍过 Java 中的几种数据类型,那么String是一种字符串数据类型,String 类型的变量保存的是字符串类型的数据,比如一句话,一段文字。

1. 定义字符串类型变量:

String str = "abc";
String str1 = "";
String str2 = new String("你好");

String指定变量类型,字符串内容要用英文双引号""包裹,如果没有内容则为空字符串。也可以使用创建对象的方式来定义字符串类型变量:String str2 = new String("你好");

String是一种引用类型变量,不同于基本类型变量。注意String是一个类,定义一个字符串的本质是创造一个String类的一个对象出来,把字符串存放在对象中。因为该类型是一个类,当然可以使用String str2 = new String("你好");调用String构造方法,来定义一个字符串。

2. 获取字符串长度

String str = "hello, world";
System.out.println(str.length());

使用str对象的length()方法获取字符串长度,注意:一个空格也算是一个单位长度。

output:

12

3. 格式化字符串

实际情况中,你会经常需要去按照你想要的格式来处理一些字符串,比如:想把 nameagejob三个变量格式化成一个句子:我的名字叫 Arvin, 我今年 28 岁,我的职业是工程师

String name = "Arvin";
int age = 28;
String job = "工程师";

// 我的名字叫 Arvin, 我今年 28 岁,我的职业是工程师
String text = "我的名字叫 " + name + ",我今年 " + age + " 岁" + ",我的职业是" + job;
System.out.println(text);
String fromatString = "我的名字叫 %s, 我今年 %d 岁,我的职业是%s";
System.out.println(String.format(fromatString,name,age,job));

output:

我的名字叫 Arvin,我今年 28 岁,我的职业是工程师
我的名字叫 Arvin, 我今年 28 岁,我的职业是工程师

1、第一种做法是使用 +连接各个变量,会把各个变量连接在一起,这时非String类型变量会自动转换为字符串类型。

2、使用String类的 format()方法格式化字符,第一个参数是你要定义的格式化模板,后面的参数是你依次要传递的字符串变量

格式化模板中:

%s是一个字符串占位符,会把String字符串类型的数据替换到该位置。该实例中,name的值在格式化后会被替换到 %s的位置。

%d是一个数值占位符,格式化后,age的值会被替换到该位置。

4. 字符串的比较

字符串类型变量进行比较时不能直接使用 ==,要使用String变量的equals()方法。

String str = "abc";
String str1 = new String("abc");

System.out.println(str == str1);
System.out.println(str.equals(str1));
String str2 = "abcd";
if ("abc".equals(str2)) {
    System.out.println("字符串 abc 和 str2 的内容相等");
} else {
  System.out.println("字符串 abc 和 str2 的内容不相等");
}

输出:

false
true
字符串 abc 和 str2 的内容不相等

str == str1是直接比较 str 和 str1 变量的值,而他们的存放的值不是我们的真实内容,是真实内容对应的引用地址。

str.equals(str1) 是比较 str 和 str1 中的真实内容。

5. 字符串查找

如果在一个字符串中需要去查找一些特定的内容,这时候我们可以使用以下查找方法

String str = "hello world, abc";
boolean b = str.contains("hello111");//str字符串是否包含"hello111"
System.out.println(b);
System.out.println(str.indexOf("abc111"));
if (str.indexOf("abc") > -1) {
}
System.out.println(str.startsWith("hello"));
System.out.println(str.endsWith("abc"));

输出:

false
-1
true
true

contains("查找内容"): 是否包含的意思,包含则返回true,否则返回false.

indexOf("查找内容"):查找内容在被查找字符串中的位置,返回数值,若不包含,则返回 -1,否则返回具体位置。

startsWith("查找内容"):是否以查找内容开始字符串,是则返回true,否则返回false

endsWith("查找内容"):字符串是否以查找内容结尾,是则返回true,否则返回false

6. 替换字符串

String str = "abcd, hello, yeh";
String strnew = str.replace("e", "fff");
System.out.println(strnew);

输出:

abcd, hfffllo, yfffh

replace("被替换的内容","替换的内容")

7. 截取字符串

String str = "abc, hello, tom";
String str1 = str.substring(0,3);
System.out.println(str1);
System.out.println(str.substring(5));

output:

abc
hello, tom

substring(截取开始位置索引,截取结束位置索引)

substring(截取结束位置索引)

8. 去除字符串中的空格

有时候,你不想让字符串中存在空格

String str = "   aba  c  ";
System.out.println(str);
System.out.println(str.trim());
System.out.println(str.replace(" ",""));

output:

   aba  c  
aba  c
abac

trim(),方法可以去除字符串两端的空格,中间的空格去除不了

replace(" ",""),可以把字符串中所有的空格替换掉。

9. 分割字符串

如果你想把一个字符串,按照某种分割方式分割成一个字符串数组,你可以这样做:

String str = "red,green,yellow,blue";
String[] colors = str.split(",");
for (String color : colors) {
    System.out.println(color);
}

output

red
green
yellow
blue

split("分割点字符串"),参数是一个分割点,实例中把, 作为一个分割点。返回一个分割后的一组字符串,也即是字符串数组。

10. 转换

实际上,你会经常遇到这种情况,想把一个数值转换为字符串,或者把字符串转为为其他基本类型。

1、基本类型转为字符串

int i = 100;
double d = 292.02;
boolean b = true;

String str = i + "";
System.out.println(str);
Boolean b1 = b;
String bs = b1.toString();
System.out.println(bs);

output

100
true

基本类型变量可以直接使用 +"",转换为字符串。也可以使用其对应包装类实例的toString()方法转换为字符串。

2、字符串转为基本类型

String is = "100";
int i = Integer.parseInt(is);
int sum = i + 200;
System.out.println(sum);

output

300

字符类型转为基本类型,可以使用基本类型对应的包装类实例的 parseXX()方法,该实例中 Integer.parseInt(is)把字符串"100"转为int类型的100,可以进行运算。

11. StringBuffer

你已经知道,可以使用 +连接多个变量,并转换为一个字符串类型的值。但是这种做法效率并不是很高,可以在低频次、少量连接操作使用它。如果要高频次、大量的连接字符串操作,可以使用 StringBuffer

String name = "tom";
int age = 28;
String job = "自由职业";
// tom, 28, 自由职业
StringBuffer buffer = new StringBuffer(name);
buffer.append(", ")
        .append(age)
        .append(", ")
        .append(job);
System.out.println(buffer.toString());

output:

tom, 28, 自由职业

append()方法用于连接字符串。可以高频次使用,效率较高。

我只是展示了关于String字符串常用操作,当然它有很多个操作,如果用到其他方法,建议大家去查找 Java API.

如果你想学习编程,又没有太多的预算或者自学N天无果。那你可以试试我的编程私教服务:JavaWeb全栈开发一对一编程私教,属于你的编程私人教练!

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,028评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,674评论 0 38
  • 1月9号,微信正式上线微信小程序,业界一片沸腾。 有人认为小程序是为手机瘦身而生,有人认为小程序的出生是腾讯为了将...
    0316阅读 948评论 0 8