文档章节

Java基础知识_day08_(API,String类,StringBuilder类)

S
 Sunmos
发布于 2017/05/13 00:18
字数 1958
阅读 2
收藏 0
点赞 0
评论 0

内容摘要:

  • API概述
  • String类(字符串类)
  • StringBuilder类(字符串缓冲区类)

1. API概述

1.1 概述:

API(Application Programming Interface)应用程序编程接口,Java中的API是指JDK中提供的各种功能的Java类.

1.2 使用方法:

a). 使用API文档中的索引功能搜索需要查询的Java类.
b). 搜索到相关的类,需要关注一下几点:
  类所处的包,如果是java.lang包下的,使用时就不需要导包;
  类的描述信息,就是弄清楚该类的功能;
  构造方法:用于创建该类的对象的方式有哪些;
  成员方法:关注返回值类型,方法名,形式参数.

2. String类

2.1 String类概述:

String 类代表字符串,Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现;
字符串是常量;它们的值在创建之后不能更改;
字符串的本质是一个字符数组;
字符串是一种较为特殊的引用数据类型,直接输出字符串对象输出的是该对象中的数据.

2.2 String类构造方法:

String(String original):把字符串数据封装成字符串对象;
String(char[] str):把字符数组的数据封装成字符串对象;
String(char[] value,int index,int count):把字符数组中的一部分数据封装成字符串对象,index是开始的索引值,count是字符的个数;

2.3 通过构造方法和直接赋值方式创建的字符串对象区别:

构造方法创建的字符串对象是在堆内存中,直接赋值创建的字符串对象是在方法区的常量池.

案例:

public class StringDemo {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "hello";

        // s1和s2指向方法区中常量池中的同一个字符串对象,所以输出的地址值相同
        System.out.println((s1==s2));   // true

        s1 = "helloWorld";
        // 将s1的值重新赋值,相当于是在常量池中重新创建一个字符串对象,则结果是false
        System.out.println((s1==s2));   // false
        // 由于s1指向的字符串对象发生改变,但是s2还是指向之前的那个字符串,所以s2输出结果不变
        System.out.println(s2);         // hello


        String s3 = new String("hello");
        String s4 = s3; 
        // 将s4也指向堆内存中那个字符串对象,则此时s3和s4的地址值相等
        System.out.println(s3==s4);     // true

        // 将s3指向一个新的字符串,相当于是s3指向了常量池中的字符串对象
        s3 = "helloworld";
        // s3指向常量池中的字符串对象,s4是指向堆内存中的字符串实体,通过实体再指向常量池中的字符串
        // 则s3和s4的地址值不同
        System.out.println(s3==s4);     // false
        // s3和s4指向的字符串对象不同,则输出的字符串不同
        System.out.println(s3);         // helloworld
        System.out.println(s4);         // hello
    }
}

2.4 字符串的判断功能(成员方法): 返回值为boolean类型

boolean equals(Object obj):比较两个字符串的内容是否相同,其中参数可以是任意object的子类对象;
boolean equalsIgnoreCase(String str):比较两个字符串的内容是否相同,忽略大小写;
boolean startsWith(String str):判断字符串对象是否以指定的str开头;
boolean endsWith(String str):判断字符串对象是否以指定的str结尾.

2.5 String类的获取功能:

int length():获取字符串的长度,就是字符的个数;
char charAt(int index):获取指定索引处的字符,索引值必须存在,否则会报索引越界异常;
int indexOf(String str):获取字符串str在字符串对象中首次出现的索引,如果不是单个字符,则返回str中第一个字符的索引,如果不存在返回-1;
String substring(int start):从Start索引处截取到结束的子串;
String substring(int start, int end):从Start(包含)索引处截取到end索引(不包含)为止的子串.

案例:

public class StringDemo3 {
    public static void main(String[] args) {
        String s = "HelloSomnus";

        // int length()
        System.out.println(s.length());

        // char charAt(int index)
        System.out.println(s.charAt(7));    // m
// System.out.println(s.charAt(12)); // java.lang.StringIndexOutOfBoundsException异常

        // int indexOf(String str)
        System.out.println(s.indexOf("S")); // 5
        System.out.println(s.indexOf("Som"));   // 5 是str字符串首字母首次出现的索引
        System.out.println(s.indexOf("h")); // -1表示字符串不存在

        // String substring(int start)
        System.out.println(s.substring(5));     // Somnus
// System.out.println(s.substring(13)); // java.lang.StringIndexOutOfBoundsException异常

        // String substring(int start, int end)
        System.out.println(s.substring(5, 8));  // Som,包含开始索引,不包含结束索引
    }
}

2.6 String的转换功能:

char[] toCharArray():把字符串转换为字符数组;
String toLowerCase():把字符串转换为小写字符串;
String toUpperCase():把字符串转换为大写字符串.

案例:

public class StringDemo4 {
    public static void main(String[] args) {
        String s = "helloWorld";

        // char[] toCharArray()
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            System.out.println(chs[i]);
        }

        // String toLowerCase()
        String s1 = s.toLowerCase();
        System.out.println(s1);

        // String toUpperCase()
        String s2 = s.toUpperCase();
        System.out.println(s2);
    }
}

2.7 String类的其他功能:

String trim():取出字符串两端的空格,返回字符串对象;
String[] split(String str):按照指定str分割字符串,结果为字符串数组.

案例:

public class StringDemo5 {
    public static void main(String[] args) {
        String s = "aabbcc";
        String[] s1 = s.split("b");

        System.out.println(s1.length);

        for (int i = 0; i < s1.length; i++) {
            System.out.println(s1[i].length());
            System.out.println(s1[i]);
        }
    }
}

3. StringBulider类

3.1 StringBulider类概述:

是一个可变长的字符串,属于字符串缓冲区类;
StringBulider也是一种较为特殊的引用数据类型,直接输出的是该对象中的数据.

3.2 String和StringBuilder的区别:

String的内容是固定的(在常量池中一旦生成无法改变);
StringBuilder是可变长度的字符串;
String使用+做字符串拼接时,效率较低并浪费空间.

3.3 StringBuilder构造方法:

StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符;
StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容.

3.4 StringBuilder成员方法:

public int capacity():返回当前容量(容器的理论容量).容量指可用于最新插入字符的存储量,超过这一容量便需要再次分配;
public int length():返回长度(字符数),已经存储的字符个数;
public StringBuilder append(任意类型):将参数追加到此对象值得后面,返回其本身;
public StringBuilder reverse():将自身字符反转,并返回其本身.

3.5 String与StringBuilder之间的转换:

StringBuilder->String: StringBuilder对象通过其toString方法转换为String对象;
String->StringBuilder: 通过StringBuilder的构造方法可以得到String对象.

案例:

/* * StringBuilder:是一个可变长的字符串,属于字符串缓冲区类. * 构造方法: * StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符. * StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容. * 成员方法: * public int capacity():返回当前容量(容器的理论容量).容量指可用于最新插入字符的存储量,超过这一容量便需要再次分配. * public int length():返回长度(字符数),已经存储的字符个数. * public StringBuilder append(任意类型):将参数追加到此对象值得后面,返回其本身. * public StringBuilder reverse():将自身字符反转,并返回其本身. */
public class StringBuilderDemo {
    public static void main(String[] args) {
        // 空参构造方法
        StringBuilder sb1 = new StringBuilder();
        System.out.println(sb1.capacity()); // 16初始化时分配的容量
        System.out.println(sb1.length());   // 空字符,代表当前没有存储字符

        // 有参构造方法,将初始值设为指定字符串
        StringBuilder sb2 = new StringBuilder("hello");
        System.out.println(sb2.capacity()); // 21代表当前的容量,总会有16个字节的空余空间
        System.out.println(sb2.length());   // 5代表当前存储的字符个数

        // public StringBuilder append(任意类型),返回值为其本身,故可以链式编程
        sb2.append("world");
        sb2.append(12.34);
        System.out.println(sb2);    // helloworld12.34
        sb2.append("somnus").append(3.14).append(true);
        System.out.println(sb2);    // helloworld12.34somnus3.14true

        // public StringBuilder reverse()
        sb2.reverse();
        System.out.println(sb2);    // eurt41.3sunmos43.21dlrowolleh
    }
}

本文转载自:http://blog.csdn.net/l631106040120/article/details/64128846

共有 人打赏支持
S
粉丝 0
博文 34
码字总数 0
作品 0
成都
【翻译】Java中String, StringBuffer, StringBuilder的区别

String 是 Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会用String定义一些内容,然后通过著名的System.out.println()语句来打印出来。 然而,很多Java新手都不会意识到 String...

YuanyuanL
2014/09/03
0
4
《Java从小白到大牛》之第9章 字符串

《Java从小白到大牛》纸质版已经上架了!!! 由字符组成的一串字符序列,称为“字符串”,在前面的章节中也多次用到了字符串,本章将重点介绍。 Java中的字符串 {#java} Java中的字符串是由...

tony关东升
07/11
0
0
java内存分配和String类型的深度解析

一、引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题。下面是...

萧十一郎君
2013/10/19
0
30
(转)StringBuilder与StringBuffer和String 的区别

很多人对String和StringBuffer的区别已经很了解了吧,可能还有人对这两个类的工作原理有些不清楚的地方,复习一下吧,顺便牵出J2SE 5.0(文档)里面带来的一个新的字符操作的类StringBuilder...

王振威
2012/03/08
0
1
深入理解 String, StringBuffer 与 StringBuilder 的区别

String 字符串常量 StringBuffer字符串变量(线程安全) StringBuilder字符串变量(非线程安全) 简要的说, String 类型和StringBuffer类型的主要性能区别其实在于 String 是不可变的对象,...

大数据之路
2013/01/16
0
0
Java面试基础篇——第三篇:String,StringBuffer,StringBuilder区别

我们先对比下String, StringBuffer, StringBuilder这三个类。他们的主要区别一般体现在线程安全和执行效率上。 类名 String StringBuffer StringBuilder 线程安全 安全(final修饰) 安全 不...

developlee的潇洒人生
07/16
0
0
非可变性(Immutability)和对象引用(Object reference)

一些比较核心的Java问题经常会用来考验面试者的Java基本知识功底。这篇文章列出来了一些在我的书里面没有的面试题,通过这些面试题读者也可以梳理一下Java基础知识点。 Q1.下面的代码片段会输...

markGao
2014/03/10
0
0
String、StringBuilder、StringBuffer的区别

菜鸟的第一篇JAVA博客,现在我讲一下String、 StringBuilder、StringBuffer的区别 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) String...

J4Long
2013/03/03
0
1
Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/23
0
0
StringBuilder与StringBuffer的比较

很多人对String和StringBuffer的区别已经很了解了吧,可能还有人对这两个类的工作原理有些不清楚的地方,复习一下吧,顺便牵出J2SE 5.0里面带来的一个新的字符操作的类StringBuilder。那么这...

Koon.LY
2012/05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
3
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部