常用API:字符串操作:String类,StringBuffer类,StringBulider类

字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作。

1、String类:

 public class StringDemo {
public static void main(String[] args)
{
StringDemo1();
}
protected static void StringDemo1()
{
/*java中有两种创建String对象的方法:
* 1、使用字面量,就是直接用"字符串"即可:!!!是在字符串常量池中,如果没有则创建;如果有则直接使用
* 2、使用new:和普通对象一样在对内存中创建,!!!是两个对象,先是参数字符串对象,然后是new的一个副本
*/
String s="abc";
String s1="abc";
String s2=new String("abc");
/*由上面的创建过程可知:字面量相同,则创建的对象相同,而字面量和new方法创建的对象地址不同
* !!!但是String类中将equals进行重写,是比较字符串的内容而不是地址
*/
System.out.println("s==s1是"+(s==s1));
System.out.println("s==s2是"+(s==s2));
System.out.println("s.equals(s2)是"+s.equals(s2));
/*字符串字面量是常量,所以不允许改变值,
* !!!下面的操作是重新赋值,同样会在字符串常量池中进行查找,如果没有则会重新创建并返回地址
*/
s="def";
System.out.println(s);
} }

String类简介

 public class StringFunction1 {

     public static void main(String[] args)
{
StringConstructorDemo();
StringFunctionGet();
StringFunctionChance();
StringFunctionJudge();
StringFunctionCompare();
StringFunctionOther();
} private static void StringConstructorDemo()
{
/*对于String类中的构造函数,常用的是将byte[]和char[]转换为String对象,并可以截取一段
* 对于byte[]数组是使用ascii码表进行转换
*/
byte[] arr={65,66,67,95};
String s=new String(arr);
System.out.println("s="+s);
char[] arr1={'a','s','d','f','g'};
String s1=new String(arr1,1,3);
System.out.println("s1="+s1);
} public static void StringFunctionGet() {
String s="asdfgasd";
//获取长度
int length=s.length();
System.out.println("length="+length);
//字符串和数组类似,可以看做是包含字符的数组,同样是从0角标开始
//获取指定角标字符
int num=4;
char c=s.charAt(num); //超出长度报StringIndexOutOfBoundsException
System.out.println("第"+num+"位角标上的字符是"+c);
//*获取指定字符(串)出现的角标,这是一系列方法,重要
char c1='k';
int i=s.indexOf(c1); //如果没有改字符(串)则返回-1
System.out.println("第一次出现"+c1+"的角标是"+i);
//获取子串
String substring=s.substring(2, 6);
System.out.println("substring=\""+substring+"\"");
}
public static void StringFunctionChance()
{
//字符串的转换:就是将字符串格式转换为其他格式 //用切割的方式将字符串转换为字符串数组,!!!使用正则表达式规则,特殊字符需要进行转义
String s="张三.李四.王武";
String[] arr=s.split("\\.");
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
//转换为char[]
char[] c=s.toCharArray();
for (int i = 0; i < c.length; i++)
{
System.out.println(c[i]);
}
//转换为byte[],可以指定字符串的编码格式,然后获取其字节值
s="aB中";
byte[] b=s.getBytes();
for (int i = 0; i < b.length; i++)
{
System.out.println(b[i]);
}
//转换为大/小写格式
System.out.println(s.toUpperCase());
System.out.println(s.toLowerCase());
//转换指定位置的内容:如果找到则替换,没有则不换.返回替换后字符串
System.out.println(s.replace("中", "中国"));
//去除两端空格
System.out.println("-"+" ab c ".trim()+"-");
//字符串连接,将字符串的+操作封装
System.out.println("abc".concat("kk"));
System.out.println("abc"+"kk");
} private static void StringFunctionJudge() {
//String类的判断方法
//判断两个字符串是否相等,使用equals(),重写了Object的该方法
String s="abc";
System.out.println(s+"==Abc是"+s.equals("Abc"));
//判断两个字符串是否相等(忽略大小写)
System.out.println("忽略大小写时,"+s+"==Abc是"+s.equalsIgnoreCase("Abc"));
//System.out.println(s.equals("Abc".toLowerCase()));
s="ArrayDemo.java";
//判断字符串中是否包含某子串
System.out.println(s+"中包含\"demo\"是"+s.contains("Demo"));
//contains()其实就是将indexOf()方法返回-1的情况进行判断
//判断字符串是否以某字串开始/结束
System.out.println(s+"以\"Array\"开头是"+s.startsWith("Array"));
System.out.println(s+"以\".java\"结尾是"+s.endsWith(".java"));
} private static void StringFunctionCompare() {
//比较方法
//按字典顺序 (应该是Unicode码表)比较两个字串,即按字符进行比较,大则返回>0数,小则返回<0数,相等返回0
System.out.println("你".compareTo("我"));
System.out.println("abc".compareToIgnoreCase("Abc"));
} private static void StringFunctionOther() {
//这里是String类中的不常用方法
//intern():检测字符串常量池中是否有该字符串存在,有则直接返回引用;没有则先创建在返回引用
String s=new String("abc"); //栈中
String s2=s.intern(); //常量池中
System.out.println("s==s2是"+(s==s2)); //false
}
}

String类常用方法示例

 public class StringTest {
public static void main(String[] args){
//1、字符串数组排序:和int[]排序相似,只是比较时使用的是方法而不是>或<
String[] arr={"asd","wer","hehe","xfg","bcd","xgg"};
StringArraySort(arr);
printArray(arr);
//2、检测子串在字符串中的出现次数:用indexOf()循环判断,注意该方法返回的是角标值
String s=" aasnbafuhuus nbadiloveyouuelinbasod ",sub="nba";
int count=subStringCount(s,sub);
System.out.println("count="+count);
//3、寻找两字串中最大相同子串:就是判断大串中是否有小串,并将小串进行截取循环判断
String s1="abweiloveyouefhur";
String sameSubstring=sameSubstring(s,s1);
System.out.println(s+"和"+s1+"的最大相同子串是:"+sameSubstring);
//4、模拟trim()功能:获取第一个/最后一个非空格字符的角标进行截取
System.out.println("-"+myTrim(s)+"-");
}
//1、
public static void printArray(String[] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1){
System.out.print(arr[i]+",");
}else{
System.out.print(arr[i]);
}
}
System.out.println("]");
} public static void StringArraySort(String[] arr) {
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-1;j++){
if(arr[j].compareTo(arr[j+1])<0){
swap(arr,j,j+1);
}
}
}
}
private static void swap(String[] arr,int a,int b){
String temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
} //2、
private static int subStringCount(String s,String sub) {
int num=0;
int slength=s.length(),sublength=sub.length();
if(slength<sublength){
return num;
}
if(s.contains(sub)){
/*
for (int i = 0; i <= slength-sublength;) {
i=s.indexOf(sub,i);
if(i!=-1){
num+=1;
i+=sublength;
}else{
break;
}
}
*/
int index=0;
while((index=s.indexOf(sub))!=-1){
num+=1;
s=s.substring(index+sublength);
}
return num;
}else{
return num;
}
} //3、
public static String sameSubstring(String s,String s1) {
if(s.length()<s1.length()){
swap(s,s1);
}
int s1length=s1.length();
if(s.contains(s1)){
return s1;
}
String substring="";
for (int i = s1length; i>0; i--) {
for (int j = 0; j < s1length-i+1; j++) {
substring=s1.substring(j, j+i);
if(s.contains(substring)){
return substring;
}
}
}
return substring;
}
private static void swap(String a,String b){
String Temp=a;
a=b;
b=Temp;
} //4、
public static String myTrim(String str) {
int indexstart=0,indexend=str.length();
while(str.charAt(indexstart)==' '){
indexstart++;
}
if(indexstart!=indexend){
while(str.charAt(indexend-1)==' '){
indexend--;
}
}
return str.substring(indexstart,indexend);
} }

String类方法的简单应用

2、StringBuffer类:

public class StringBufferClass {
public static void main(String[] args){
StringBufferDemo();
StringBufferCURDFunction();
StringBufferOtherFunction();
//下面是StringBuilder(也就是StringBuffer类的示例),注意看区别
int[] arr={3,6,2,6,8,1};
System.out.println(StringBufferTest1(arr));
System.out.println(StringBufferTest2(arr));
} private static void StringBufferDemo() {
/*StringBuffer是一个容器,和数组不同的是
* 1、长度可变(初始长度为16字符):其实是在创建一(多)个16长度的数组,在将字串值复制过来,然后装入新内容
* 2、可以存储不同类型值(注意不是所有类型:例如不包括byte)
* 3、最终会转换为字符串类型
* !!!4、和String不同的是,该类可以修改字符串值而不创建新空间
*/
StringBuffer sb=new StringBuffer();
//创建StringBuffer对象时也可以指定长度,效率较高
StringBuffer s1=new StringBuffer(40);
StringBuffer s=sb.append(4);
/* !!!注意:有些操作返回本类对象,其实就是操作后 容器中 字符串的地址,所以两者是相等的
* 并且该对象还可以继续进行操作,就是链式操作
*/
System.out.println("s==sb是"+(s==sb));
sb.append(true).append("haha");
System.out.println(sb);
} private static void StringBufferCURDFunction() {
StringBuffer sb=new StringBuffer("i");
//C:create,增
//append()是向后追加
StringBuffer s=sb.append("you");
//insert()是在指定位置插入
s.insert(1, "hate");
System.out.println(s);
//D:delete,删。注意没有清空的方法,可以用删除方法代替。
//delete()删除指定位置,包含头,不含尾
s.delete(5,8);
//deleteCharAt()删除一个字符
s.deleteCharAt(0);
System.out.println(s);
//R:read,查。和String的方法类似,indexOf(),charAt(),lastIndexOf()等
//U:update:改
//replace()替换一段字符,包含头,不含尾
s.replace(1,4,"ove");
//setCharAt()替换一个字符,!!!注意该方法返回void
s.setCharAt(0, 'l');
System.out.println(s);
} private static void StringBufferOtherFunction() {
StringBuffer s=new StringBuffer("test");
//setLength():设置长度,长则补空字符,并修改长度属性;短则剪切,并修改长度属性。
s.setLength(10);
System.out.println(s);
s.setLength(4);
//reverse():反转字符串内容
System.out.println(s.reverse());
} /*下面两种方法看似类似,其实后者更好,
* 因为使用+的字符串连接操作每次都会在字符串常量池中产生一个新字符串对象,浪费空间
* 而后者是容器可修改
*/
private static String StringBufferTest1(int[] arr) {
String str="[";
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1){
str+=arr[i]+", ";
}else{
str+=arr[i]+"]";
}
}
return str;
} private static String StringBufferTest2(int[] arr) {
StringBuilder sb=new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1){
sb.append(arr[i]+", ");
}else{
sb.append(arr[i]+"]");
}
}
return sb.toString();
}
}

StringBuffer类和StringBuilder类

3、StringBuilder类:

Java学习笔记五 常用API对象一的更多相关文章

  1. Java学习笔记七 常用API对象三

    一.泛型:简单说就是对对象类型进行限定的技术 public class GenericDemo { public static void main(String[] args){ /*泛型作为1.5版 ...

  2. Java学习笔记六 常用API对象二

    1.基本数据类型对象包装类:见下图 public class Test { public static void main(String[] args){ Demo(); toStringDemo() ...

  3. Java学习笔记之---类和对象

    Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态  例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...

  4. Activiti学习笔记5 — 常用API解析

    常用API解析: 一.ProcessEngineConfiguration 流程引擎配置对象(配置数据库连接4个大配置和建表策略) 二.ProcessEngine          流程引擎核心对象( ...

  5. Java学习笔记(2)--- 对象和类入门,java包,this 和 super区别

    1.对象和类(Object and class): 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 面对对象编程是java非常重要的一部分,作者本身之前学过c ...

  6. Java基础学习笔记(五) - 常用的API

    API介绍 概念:API 即应用编程程序接口.Java API是JDK中提供给我们使用的类说明文档,这些类将底层的代码实现封装.无需关心这些类是如何实现,只需要学习如何使用. 使用:通过API找到需要 ...

  7. Java学习笔记五:Java中常用的运算符

    Java中常用的运算符 运算符是一种“功能”符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 score 的值设置为 20 ,这时候就需要一个“=”,告诉程序需要进行赋值操作. Java ...

  8. Java基础学习笔记十三 常用API之正则表达式、Date、DateFormat、Calendar

    正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex).正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串.在 ...

  9. Java学习笔记5(API)

    Java API API(Application Programming Interface)指的是应用程序编程接口. String类 String初始化有两种,一个是使用字符串常量初始化一个Stri ...

随机推荐

  1. ArcGIS 空间查询

    public static bool QueryMessPoint(IActiveView activeView, IFeatureClass featureClass, string whereCl ...

  2. OpenGl 坐标转换

    1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观測变换(ModelView Transformation)和投影变换(Projection Transformation). 做个 ...

  3. Linux下EPoll通信模型简析

    EPoll基于I/O的事件通知机制,由系统通知用户那些SOCKET触发了那些相关I/O事件.事件中包括相应的文件描写叙述符以及事件类型.这样应用程序能够针对事件以及事件的source做相应的处理(Ac ...

  4. 优化时序之补全if else

    时序优化中重要的一项就是提高模块的最高工作频率,工作频率由关键路径决定,通常的提高工作频率的步骤是:利用时序分析工具找到关键路径,分析关键路径主要延迟是布线延迟还是逻辑延迟,然后轮番十八般武器,如果是 ...

  5. @Not - Empty-Null-Blank

    1 @NotEmpty :不能为null,且Size>0 2  @NotNull:不能为null,但可以为empty,没有Size的约束 3  @NotBlank:只用于String,不能为nu ...

  6. 玲珑杯 Round #18 A -- 计算几何你瞎暴力

    因为坐标都在1-10之间,因此可暴力求解 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  7. tensorflow学习之路---简单的代码

    import numpyimport tensorflow as tf #自己创建的数据x_data = numpy.random.rand(100).astype(numpy.float32)#创建 ...

  8. b模式处理文件

    1.读 f=open('cheng','rb') date=f.read() print(date.decode()) 2.写 f=open('cheng','ab') f.write('chengz ...

  9. 手把手教你用vue-cli构建一个简单的路由应用

    上一章说道:十分钟上手-搭建vue开发环境(新手教程)https://www.jianshu.com/p/0c6678671635 开发环境搭建好之后,那么开始新添加一些页面,构建最基本的vue项目, ...

  10. Maven学习总结(20)——Maven pom.xml配置再体会

    Maven的pom.xml配置文件详解 <!--父项目的坐标.如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值. 坐标包括group ID,artifact ID和 vers ...