java基础之常用类

String类

String表示字符串,所谓字符串,就是一连串的字符,是java中最常用的类之一。

String是不可变类,一旦String对象被创建,包含在对象中的字符序列(内容)是不可变的,直到对象被销毁;

String对象保存在JVM的常量池中,String类是用final来修饰的,是不可以被继承的类。

常量池

常量池: JVM中一块独立的区域存放字符串常量和基本类型常量(被public static final修饰的)。

String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后

,就不能再修改此对象中存储的字符串内容,就是因为如此,才说String类型是不可变的.

String对象的创建方式

	String str = "HelloWorld";
String str2 = new String("upuptop");
String str3 = String.valueOf(1);
String str4 = 123+"";

String对象比较:

单独使用""引号创建的字符串都是常量,编译期就已经确定存储到常量池中;

使用new String("")创建的对象会存储到堆内存中,是运行期新创建的;

使用只包含常量的字符串连接符如"aa" + "bb"创建的也是常量,编译期就能确定,已经确定存储到常量池中;

使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在堆中;


public class StringDemo {
public static void main(String[] args) {
/*
* "" 其实表示的是 String的匿名对象
*/
String s = "";
/**
* String() 初始化一个新创建的 String 对象,使其表示一个空字符序列。
* "",不是表示 null
* String(String original)
* String s = new String("asd");// s 的值就是 asd
*/
s = new String();//""
String s1 = new String("11");
String s2 = new String("11");
System.out.println(s1 == s2);//false
String s3 = "22";
String s4 = "22";
System.out.println(s3 == s4);//true
System.out.println(s3 == s2);//false
String s5 = "2" + "2";//这句话其实在编译器编译后的class文件中 已经变成 "22"
//s5创建了几个对象?//回答:最多一个,如果常量池里面没有就是创建一个,如果常量池里本来就有就是创建零个!下面的str一样的道理。
String str = "A" +"B"+ "C" +"D" +"E";//String str = "ABCDE";
System.out.println(s3 == s5);//true
/**
* String特点: 不可变的, 一个String对象的内容不能变,一旦内容变量该对象就变成一个新的String对象了
* String str = "AAA";
* str = str+"12";
*/
String str1 = "ABCDE";
System.out.println(str == str1);//true
String str2 = "ABC" + "DE";
System.out.println(str == str2);//true
String ss = "AB";
String str3 = ss + "CDE";//这里的str3在运行期才能确定内容值
System.out.println(str3 == str2);//false
String str4 = getStr() +"CDE";//在运行期才能确定 str4的值
System.out.println(str == str4);//false
System.out.println(str3 == str4);//false
/*
* String s = "cd"; //一个String对象
s = s + "itcast"; //itcast也是String对象, 最后的s的值cditcast,也是一个String对象
System.out.print(s);
* */
}
public static String getStr(){
return "AB";
}
}

String常用方法

方法名 意义
String() 初始化一个新的 String 对象,使其表示一个空字符序列,并不是返回空(不等于 null)。
String(StringBuffer buffer) 根据StringBuffer对象来创建String对象;
String(StringBuilder builder) 同上
char charAt(int index) 取字符串中指定位置的字符,index从0开始计算。
String concat(String str) 连接字符串,等同于 “+”;
boolean contentEquals(StringBuffer buffer) 若二者包含的字符序列相同时就返回true;
boolean equals(Object obj) 将该字符串与指定对象比较,若二者包含的字符序列相等返回true;
boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写;
byte[] getBytes() 将该字符串转换成byte数组;
int indexOf(String str) 找出str字符串在该字符串中第一次出现的位置;
int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始;
int lastIndexOf(String str) 返回指定子字符串在此字符串中最后一次出现处的索引;
int length() 返回当前字符串长度;
String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replaceAll(String regex, String replacement) 使用给定的 字符串replacement 替换此字符串所有的regex字符串;
boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始.
String[] split(String regex) 把字符串按指定的字符串分隔开。
String substring(int beginIndex) 返回一个新的字符串,从beginIndex开始截取,它是此字符串的一个子字符串;
String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串;[begin,end)
char[] toCharArray() 将此字符串转换为一个新的字符数组。
String toLowerCase() 将此 String 中的所有字符都转换为小写;
String toUpperCase() 转成大写;
static String valueOf(基本类型 obj) 把基本类型值转成字符串;
String trim() 忽略字符串前导空白和尾部空白。

String小练习

  1. 判断字符串是否由纯数字组成:

package reviewDemo; public class Demo20 {
public static void main(String[] args) {
String s1 = "123456789";
String s2 = "12345 6789";
System.out.print(isnum(s1));
System.out.print(isnum(s2));
} public static boolean isnum(String s){
//将字符串参数转为字符数组
char []ch = s.toCharArray();
//循环字符数组,判断每一个元素是否在数字对应的字符区间内
for (char c : ch) {
//判断字符是否在[0-9]这个区间内部
if(!(c > '0' && c <= '9')){
return false;
}
}
return true;
}
} 输出: true
false
  1. 判断字符串是否为空:
分析:
字符串的空有两种情况:1、null;2、""; package reviewDemo; public class Demo21 {
public static void main(String[] args) { String s1 = "";
System.out.println(isimpty(s1)); } public static String isimpty(String s){ if(s != null && !"".equals(s)){
return "不为空";
}
return "为空!";
}
}

StringBuffer 与 StringBuilder

String是不可变类,一旦String对象被创建,包含在对象中的字符序列是不可变的,直到对象被销毁;

StringBuffer 与 StringBuilder对象则是可变的!

由于String创建的对象是一个不变化的对象,为了方便在我们使用过程中修改字符串的内容,java为我们提供了StringBUffer和StringBuilder两个类

StringBuffer是线程安全的类,StringBuilder是线程不安全的类。在多线程环境下使用StringBuffer。


在平时的编程中,我们为了方便,总是使用字符串之间相互加减进行操作修改字符串的内容。
比如:
String a = "h";
String b = "e";
String c = "c";
String result = a + b +c +"result" ; 如上方式是不高效的,推荐修改为StringBuilder或StringBuffer。下列程序验证了程序的高效性。 package reviewDemo; public class Demo22 {
public static void main(String[] args) { String s = "";
long begintime = System.currentTimeMillis();
for(int i = 1;i <= 100000;i++){
s += i;
} long endtime = System.currentTimeMillis();
long time = endtime - begintime;
System.out.println("运行时间为:"+time); StringBuffer s1 = new StringBuffer();
s = "";
begintime = System.currentTimeMillis();
for(int i = 1;i <= 100000;i++){
s = ""+i;
s1 = new StringBuffer(s);
} endtime = System.currentTimeMillis();
time = endtime - begintime;
System.out.println("运行时间为:"+time); }
} 输出:
运行时间为:82922
运行时间为:15
可以看得出:StringBuffer这两个效率相当高!

StringBuffer 与 StringBuilder

  • StringBuffer: 是线程安全的;
  • StringBuilder: 是线程不安全的,性能高点,推荐使StringBuilder;(jdk1.5出现)
  • StringBuffer的字符序列是可变的(通过append等方法操作)
  • StringBuffer 和 String之间的转换;
  • String toString() 返回此序列中数据的字符串表示形式。
  • StringBuffer(String str):以指定的字符串创建StringBuffer对象。

StringBuffer方法

方法名 意义
public StringBuilder() 构造一个不带任何字符的StringBuilder对象。
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
StringBuffer append(Object o) 将指定的任意类型对象追加到此StringBuffer 对象。
StringBuffer insert(int offset, Object o) 将任意类型参数的字符串表示形式插入此序列中。
StringBuffer delete(int start, int end) 移除此序列的子字符串中的字符。
StringBuffer deleteCharAt(int index) 移除此序列指定位置的 char。

练习

  1. 需求:用StringBuilder 或StringBuffer: 把字符串“ABCDE”; 转变成字符串“A,B,C,D”


public class Demo23 {
public static void main(String[] args) {
//第一种方法:往里面插入;
StringBuilder sb = new StringBuilder("ABCDE");
sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
for (int i = 0; i < sb.length(); i+=2) {
sb.insert(i, ",");
}
sb.deleteCharAt(0); System.out.println(sb); //第二种方法:往里面追加,要追加必须遍历,必须换为数组!
sb = new StringBuilder("ABCDE");
sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
char []cs = sb.toString().toCharArray();
StringBuilder sb1 = new StringBuilder();
for (char c : cs) {
sb1.append(c).append(",");
}
sb1.deleteCharAt(sb1.length()-1);
System.out.println(sb1);
}
}
  1. 编写一个程序,这个程序把一个整数数组中的每个元素用逗号连接成一个字符串,例如,根据内容为{1,2,3}的数组形成内容为"1,2,3"的字符串。

package reviewDemo;
/**
* 编写一个程序,
* 这个程序把一个整数数组中的每个元素用逗号连接成一个字符串,
* 例如,根据内容为{1,2,3}的数组形成内容为"1,2,3"的字符串。
*/ public class Demo24 {
public static void main(String[] args) {
int []i = {1,2,3,4,5};
StringBuilder sb = new StringBuilder();
for (int j : i) {
sb.append(j).append(",");
}
sb.deleteCharAt(sb.length()-1);
System.out.println(sb);
}
}

注意:

字符串是任何程序语言的最常用、处理操作最多的。即使在大数据领域也是以处理文本数据为主。

推荐朋友关注【趣学程序】公众号,公众号内所有资源免费获取。

[趣学程序]java的常用类之String的更多相关文章

  1. Java基础—常用类之String类

    一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...

  2. Java API 常用类(一)

    Java API 常用类 super类详解 "super"关键字代表父类对象.通过使用super关键字,可以访问父类的属性或方法,也可以在子类构造方法中调用父类的构造方法,以便初始 ...

  3. Java常用类:包装类,String,日期类,Math,File,枚举类

    Java常用类:包装类,String,日期类,Math,File,枚举类

  4. JAVA基础--常用类 String,StringBuffer, 基础数据类型包装类, Math类, Enum类

    字符串相关类: String, StringBuffer String类为不可变的字符序列 String s1="hello"; String s2="hello&quo ...

  5. Java之常用类及方法

    下面我们介绍Java类库所提供的常用类及类的常用方法 一.java.lang.String 1. String类常用的构造函数 public String(String original) 使用串对象 ...

  6. Java——常用类(String)

    [常用类]   <1>字符串相关类(String.StringBuffer)   <2>基本数据类型包装类   <3>Math类   <4>File类 ...

  7. Java基础常用类深度解析(包含常见排序算法)

    目录 一.工具类 1.1.工具类的设计 1.1.1.公共静态方法 1.2.单例模式 二.包装类 2.1.基本类型的包装类 2.1.1.Integer 2.1.1.1.Integer >> ...

  8. java基础---常用类

    一.字符串类String String:字符串,使用一对""引起来表示,字符串常量池在方法区中 public final class String implements java. ...

  9. Java常用类之String类、Stringbuffer和Random类练习

    定义一个StringBuffer类对象, 1)使用append方法向对象中添加26个字母,并倒序遍历输入 2)删除前五个字符 package 第十一章常用类; /** * 定义一个StringBuff ...

随机推荐

  1. k8s学习 - 概念 - master/node

    k8s学习 - 概念 - master/node 在k8s中,有各种各样的概念和术语.这些概念是必须要学习和掌握的.我们先罗列下所有概念,然后再一个个看具体实例. 大概说一下这些概念: Master: ...

  2. String到底在内存中是如何存储的

    String会出现在哪些地方 方法内的局部string 类内的字段String static string 容器中存储的string String数组 那么String的位置会影响其存储方式吗? 显然 ...

  3. Atlassian In Action-Jira之核心配置(二)

    道生一,一生二,二生三,三生万物. --<道德经> 如果说第一节的指导思想是管理之"道",那我们本节的核心配置就是Jira系统之"道"了.有了核心配 ...

  4. nu.xom:Serializer

    Serializer: 机翻 /* 使用用于控制空格,规范化,缩进,换行和基本URI的各种选项以特定编码输出Document对象 */ Serializer(OutputStream out) :创建 ...

  5. vue自定义表单生成器,可根据json参数动态生成表单

    介绍 form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成器.并且支持生成任何 Vue 组件.结合内置17种常用表单组件和自定义组件,再复杂的表单都可 ...

  6. 内核下载、nfs挂载:个性问题及解决方法~~共勉

    开发板下载内核遇到starting waiting问题时: 首先想到是下载地址的问题! 将原本下载地址减去0X40,例如:smart210下载地址0X20008000,修改为0X20007FC0,即可 ...

  7. 网络IP的操作

    10.10.10.10/8求解问题:子网掩码 10.255.255.255该IP地址所在网络的网络ID 10.0.0.0该IP地址所在网络的广播地址 10.255.255.255该IP地址所在网络的I ...

  8. Android studio 混淆打包安装后报错NullPointerException int java.util.List.size()

    菜鸟的我,尝试混淆打包app...打包之前没有什么问题,混淆打包之后遇到各种问题.首先,感谢原博主的分享.解决了我的问题.谢谢. 原文地址:http://blog.csdn.net/tou_star/ ...

  9. C语言入门1-计算机工作原理

    一. 计算机与人工智能.计算机系统: 计算机工作原理:计算机的基本原理是存储程序和程序控制,预先要把指挥计算机如何进行操作的指令序列(称为程序)和原始数据通过输入设备输送到计算机内存贮器中.每一条指令 ...

  10. 为什么选择 Spring 作为 Java 框架

    1. 概述 在本文中,我们将讨论 Spring 作为最流行的 Java 框架之一的主要价值体现. 最重要的是,我们将尝试理解 Spring 成为我们选择框架的原因.Spring 的详细信息及其组成部分 ...