/*
* String类的特点:
* 所有的""都是String的对象
* 字符串一旦创建就是常量,不能改变
*/
public class StringDemo {
public static void main(String[] args) {
//发现创建对象不需要new
String str = "abcd";
System.out.println(str);
//输出:abcd而不是内存地址,因为String类重写了toString方法
str = "efgh";
System.out.println(str);
//输出:efgh,之前不是说常量不能改变吗?这里的原因:
//字符串本身是一个对象,在堆内存中,字符串本质是一个字符的数组
//源码:private final char value[];有final修饰,因此String是常量
//str = "efgh"是在内存中重新开一片,str的指向改变了,而"abcd"字符串对象没有改变 }
}

String练习:

//1.统计某字符串中另一字符串出现的次数
public class Demo1 {
public static void main(String[] args) {
String s=new String("goodgoodstudy,daydayup");
int count=0;
JiShuQi(s,"good", count);
}
private static void JiShuQi(String s,String key, int c) {
int x=s.indexOf(key);
if (x==-1) {
System.out.println(key+"出现的次数为"+c);
return;
}
s=s.substring((x+key.length()));
c++;
JiShuQi(s, key, c);
}
}
//将一字符串首字母变成大写,其余字符小写
public class Demo2{
public static void main(String[] args) {
String s=new String("ksdhfEGBDebf");
Change(s);
} private static void Change(String s) {
String head=s.substring(0, 1).toUpperCase();
String sur=s.substring(1).toLowerCase();
String str=new String(head+sur);
System.out.println(str);
}
}
public class Zuoye3 {
/*
* 获取指定字符串中,大写字母、小写字母、数字的个数。
String s = "asdklf2234jlOLKJ"; 97--122小写
65-90 大写
48-57 0-9
* 思想:
* 1. 计数器,就是int变量,满足一个条件 ++
* 2. 遍历字符串, 长度方法length() + charAt() 遍历
* 3. 字符判断是大写,是小写,还是数字
*/
public static void main(String[] args) {
String s = "asdklf2234jlOLKJ";
int index=0;
JiShu(s,index,0,0,0);
} private static void JiShu(String s,int index, int Dcount, int Xcount, int Ncount) {
char x=s.charAt(index);
if (x>=65&x<=90) {
Dcount++;
}else if(x>=97&x<=122){
Xcount++;
}else if(x>=48&x<=57){
Ncount++;
}
index++;
if(index==s.length()){
System.out.println("大写字母:"+Dcount+"个,小写字母:"+Xcount+"个,数字:"+Ncount+"个");
return;
}
JiShu(s, index, Dcount, Xcount, Ncount);
}
}
/*StringBuffer
定义:可变字符数组 线程安全的 可变字符序列 内部定义了数组,数组没有final,可以改变,数组默认容量16
StringBuffer与String 的区别:String是一个不可变的字符序列
String一旦创建就是常量 不能改变
StringBuffer的 方法:append();
insert();
delete();
replace();
reverse();
toString();
StringBuffer与StringBuilder的区别:StringBuffer是jdk1.0版,线程安全,效率低,
StringBuilder是jdk1.5版,线程不安全,效率高
开发中用StringBuilder,因为开发速度快
*/
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer str=new StringBuffer();
fun1(str);
fun2(str);
fun3(str);
fun4(str);
fun5(str);
fun6(str);
} private static void fun6(StringBuffer str) {
// toString()转字符串;
System.out.println("方法6:toString()方法");
System.out.println("原字符串"+str);
String s=str.toString();//将StringBuffer转字符串类型
System.out.println("转字符串:"+s);
} private static void fun5(StringBuffer str) {
// reverse()方法:
System.out.println("方法5:reverse()方法");
System.out.println("原字符串"+str);
str.reverse();
System.out.println("翻转后字符串:"+str);
System.out.println(); } private static void fun4(StringBuffer str) {
// replace()方法
//replace(start, end, str);start:要替换字符的开始位置,end:替换的结束位置(不包含结束位置字符),str:替换的字符串
System.out.println("方法4:replace()方法");
System.out.println("原字符串为:"+str);
str.replace(1, 3, "-i love java-");
System.out.println("替换后的字符串为:"+str);
System.out.println();
} private static void fun3(StringBuffer str) {
// delete()方法
//delete(start, end)start:开始下标 end:结束下标()不包含结束下标的字符
System.out.println("方法3:delete()方法");
System.out.println("原字符串:"+str);
str.delete(3, 5);
System.out.println("删除后字符串:"+str);
System.out.println();
} private static void fun2(StringBuffer str) {
// insert(插入的位置(下标),插入的字符串)方法
System.out.println("方法2:insert()方法");
System.out.println("源字符串为:"+str);
str.insert(3, "java");
System.out.println("插入后字符串为"+str);
System.out.println();
} private static void fun1(StringBuffer str) {
// append()方法:追加
System.out.println("方法1:append()");
str.append("hello world");
System.out.println("原字符串为空,追加后为:"+str);
System.out.println();
}
}
/*结果:
* 方法1:append()
原字符串为空,追加后为:hello world 方法2:insert()方法
源字符串为:hello world
插入后字符串为heljavalo world 方法3:delete()方法
原字符串:heljavalo world
删除后字符串:helvalo world 方法4:replace()方法
原字符串为:helvalo world
替换后的字符串为:h-i love java-valo world 方法5:reverse()方法
原字符串h-i love java-valo world
翻转后字符串:dlrow olav-avaj evol i-h 方法6:toString()方法
原字符串dlrow olav-avaj evol i-h
dlrow olav-avaj evol i-h**/

java学习笔记15(String 类,StringBuffer)的更多相关文章

  1. 3.2常用类(java学习笔记)String与StringBuffer

    一.String String又称不可变字符序列. 我们看JDK源码中用于字符存储的数组有final修饰,final修饰变量就代表变量不能改变. 我们可以看API文档中对String的描述. Stri ...

  2. Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式

    一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...

  3. java学习笔记之String类

    String类总结 String类概述: java.lang.String 类是字符串操作类 String类的常用构造方法: //1.直接赋值 String str= "hellojava& ...

  4. java学习笔记5——String类常用方法

    1.字符串长度计算: int i = String1.length(); 2.字符串比较:1) equals()和equalsIgnoreCase //比较两个字符串对象的实体是否相同,相同输出tru ...

  5. java学习笔记7--抽象类与抽象方法

    接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...

  6. Java学习笔记16---抽象类与接口的浅显理解

    抽象类是由abstract修饰的类,定义方式如public abstract class A{...}. 接口由interface修饰,定义方式如public interface B{...}. 抽象 ...

  7. 【原】Java学习笔记031 - 常用类

    package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 类 Math: ...

  8. 1.9(java学习笔记)object类及toString()与equals()方法

    object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...

  9. Java学习笔记day06_自定义类_ArrayList

    1.自定义类class 使用类的形式, 对现实中的事物进行描述. 类是引用数据类型. 事物: 方法,变量. 方法:事物具备的功能. 变量:事物的属性. 格式: public class 类名{ //属 ...

随机推荐

  1. 如何查找php-fpm监听的端口

    1. 找到php的安装位置.如: /usr/local/php-7.3.3 2. 进入安装目录下的etc/php-fpm.d目录,然后你会看到: 3. 打开www.conf,搜索listen关键字,你 ...

  2. 『Numpy』np.ravel()和np.flatten()

    What is the difference between flatten and ravel functions in numpy? 两者的功能是一致的,将多维数组降为一维,但是两者的区别是返回拷 ...

  3. java的泛型与反射机制

    什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...

  4. 兼容IE8的video写法

    <video width="100%" height="515px" controls preload> <source src=" ...

  5. mysql 5.7版本的下载安装

    因为这次开发新的项目,需要用到mysql,因为之前用的都是oracle,所以学习下mysql的下载安装,在此留下一点记录,方便以后的回顾 一:mysql的下载地址:https://dev.mysql. ...

  6. 建一个maven项目

     建一个普通的maven项目(eclipse) 需要的jar和文件: eclipse :jdk1.8.0_144 maven:apache-maven-3.5.3     进入(下载):http:// ...

  7. Ubuntu 系统优化(不定时更新)

    系统美化 1. 为Ubuntu安装Numix主题和图标 sudo add-apt-repository ppa:numix/ppa sudo apt-get update sudo apt-get i ...

  8. [LeetCode] 100. Same Tree ☆(两个二叉树是否相同)

    描述 解析 根与根比较,左右子树互相递归比较即可. 代码 /** * Definition for a binary tree node. * public class TreeNode { * in ...

  9. 小程序util工具

    import wafer from '../lib/wafer2-client-sdk' import tip from './tip' // 时间格式化 const formatTime = tim ...

  10. nc(netcat)扫描开放端口

    探测单个端口是否开放可以用telnet,专业探测端口可以用Nmap,而对于非渗透用途的Linux可以直接用netcat. 1.使用netcat探测端口是否开放 nc -z -v - #z代表不交互要不 ...