Java笔记(三)
12. 字符串
String s1 = "abc";
String s2 = new String("abc");
s1在内存中有一个对象;s2在内存中有两个对象。
public class Demo{
public static void main(String[] args) {
String s1 = "abc";
String s2 = new String("abc");
String s3 = "abc";
System.out.println(s1 == s2);
System.out.println(s1 == s3);
}
}
输出结果 false true
对字符串的常见操作:
(1)获取:int length() 获取长度
char charAt(int index) 根据位置获取位置上的某个字符
int indexOf(int ch) 返回的是ch在字符串中第一次出现的位置
int indexOf(int ch, int fromIndex) 从fromIndex指定位置开始,获取ch在字符串中出现的位置
int indexOf(String str)
int indexOf(String ch, int fromIndex)
int lastIndexOf(int ch) ...
(2)判断:
boolean contains(str) 字符串中是否包含某一个子串;也可以indexOf(str) 索引str第一次出现的位置,如果返回-1,表示str不在字符串中存在。所以也可以用于对指定字符串判断是否包含。
boolean isEmpty() 字符串中是否有内容
boolean startWith(str) 字符串是否是以指定内容开头
boolean endsWith(str) 字符串是否是以指定内容结尾
boolean equals(str) 判断字符串内容是否相同。复写了Object类中的equals方法。
boolean equalsIgnoreCase() 判断内容是否相同,忽略大小写
(3)转换:
将字符数组转成字符串
构造函数:String(char[])
String(char[], offset, count) 将字符数组中的一部分转成字符串
静态方法:static String copyValueOf(char[])
static String copyValueOf(char[], offset, count)
static String valueOf(char[])
将字节数组转成字符串
String(byte[])
String(byte[], offset, count) 将字节数组中的一部分转成字符
将字符串转成字符数组
char[] toCharArray()
将字符串转成字节数组
byte[] getBytes()
将基本数据类型转成字符串
static String valueOf(int) static String valueOf(double)
注:字符串和字节数组在转换过程中,是可以指定编码表的。
(4)替换:
String replace(oldchar, newchar)
(5)切割:
String[] split(regex)
(6)子串:获取字符串中的一部分
String subString(begin) 从指定位置到结尾。如果角标不存在,会出现字符串角标异常
String subString(begin, end) 包含头,不包含尾
(7)转换,去除空格,比较:
将字符串转成大写或小写: String toUpperCase() String toLowerCase()
将字符串两端的空格去除: String trim()
对两个字符串进行自然顺序的比较: int compareTo(String) 如果参数字符串等于此字符串,则返回0;小于的话返回一个负数;大于返回一个正数。
字符串操作 例:
(1)模拟一个trim方法,去除字符串两端的空格。
思路:判断字符串第一个位置是否是空格,如果是,继续向下判断,直到不是空格为止。结尾处判断空格也是如此;当开始和结尾都判断到不是空格时,就是要获取的字符串。
public class Demo{
public static void main(String[] args) {
String s = myTrim(" abc de ");
System.out.println(s);
}
public static String myTrim(String str){
int start = 0;
int end = str.length() - 1;
while(start <= end && str.charAt(start++) == ' ');
while(start <= end && str.charAt(end--) == ' ');
str = str.substring(start - 1, end + 2);
return str;
}
}
(2)将一个字符串进行反转。将字符串中指定部分进行反转,“abcdefg”;“abfedcg”
思路:将字符串变成数组,对数组进行反转;将反转后的数组变回字符串;只要将反转的部分的开始和结束的位置作为参数传递即可。
public class Demo{
public static void main(String[] args) {
String s = myReverse("abcdefg", 2, 6);
System.out.println(s);
}
public static String myReverse(String str, int start, int end){
char[] arr = str.toCharArray();
reverse(arr, start, end);
return new String(arr);
}
public static void reverse(char[] arr, int start, int end){
for(int i = start, j = end - 1; i < j; i++, j--){
swap(arr, i, j);
}
}
public static void swap(char[] arr, int i, int j){
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
(3)获取一个字符串在另一个字符串中出现的次数。“abkkcdkkefkkskk”
思路:定义一个计数器;获取kk第一次出现的位置;从第一次出现位置后剩余的字符串中继续获取kk出现的位置,每获取一次就计数一次;当获取不到时,计数完成。
public class Demo{
public static void main(String[] args) {
int num = getSubCount("abkkcdkkefkkskk", "kk");
System.out.println(num);
}
public static int getSubCount(String str, String key){
int count = 0;
int index = 0;
while((index = str.indexOf(key)) != -1){
str = str.substring(index + key.length());
count++;
}
return count;
}
}
或者:
public class Demo{
public static void main(String[] args) {
int num = getSubCount("abkkcdkkefkkskk", "kk");
System.out.println(num);
}
public static int getSubCount(String str, String key){
int count = 0;
int index = 0;
while((index = str.indexOf(key, index)) != -1){
index += key.length();
count++;
}
return count;
}
}
(4)获取两个字符串中最大相同子串。
思路:将短的那个子串按照长度递减的方式获取到;将每获取到的子串,去长串中判断是否包含。如果包含,已经找到。
public class Demo{
public static void main(String[] args) {
String s1 = "abcwerthelloyuiodef";
String s2 = "cvhellobnm";
String s = getMaxSubString(s1, s2);
System.out.println(s);
}
public static String getMaxSubString(String s1, String s2){
String max = "", min = "";
max = (s1.length() > s2.length()) ? s1 : s2;
min = (max == s1) ? s2 : s1;
for(int x = 0; x < min.length(); x++){
for(int y = 0, z = min.length() - x; z != min.length() + 1; y++, z++){
String tmp = min.substring(y, z);
if(max.contains(tmp)){
return tmp;
}
// if(max.indexOf(tmp) != -1){
// return tmp;
// }
}
}
return null;
}
}
StringBuffer是字符串缓冲区,是一个容器,长度可变化,并可以操作多个数据类型,最终会通过toString方法变成字符串。
(1)存储: StringBuffer append() 将指定数据作为参数添加到已有数据的结尾处
StringBuffer insert(index, 数据) 可以将数据插入到指定index位置
(2)删除:StringBuffer delete(start, end) 删除缓冲区中的数据,包含start,不包含end
StringBuffer deleteCharAt(index) 删除指定位置的字符
对象.delete(0, 对象.length()); 清空缓冲区
(3)获取:char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
(4)修改:StringBuffer replace(start, end, String)
void setCharAt(int index, char ch)
(5)反转:reverse()
(6)void getChar s(int srcBegin, int srcEnd, char[] dst, int dstBegin)
StringBuffer线程同步,StringBuilder线程不同步
注:
public class Demo{
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
Integer m = 128;
Integer n = 128;
System.out.println(m == n);
}
}
输出结果:true false
因为a和b指向了同一个Integer对象。当数值在byte范围内(-128~127),如果该数值已经存在,则不会重新开辟新空间。
Java笔记(三)的更多相关文章
- Java笔记(三十)……正则表达式
概述 符合一定规则的表达式 专门用于操作字符串 特点: 用于一些特定的符号来表示一些代码操作,这样就可以简化书写 所以学习正则表达式,就是在学习一些特殊符号的使用 好处: 可以简化对字符串的复杂操作 ...
- Java笔记(三)……基础语法
关键字 标识符 在程序中自定义的一些名称 由26个英文字母大小写,数字:0-9,符号:_ $组成 定义合法标识符规则: 数字不可以开头. 不可以使用关键字. Java中严格区分大小写. 注意:在起名字 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- Java IO学习笔记三:MMAP与RandomAccessFile
作者:Grey 原文地址:Java IO学习笔记三:MMAP与RandomAccessFile 关于RandomAccessFile 相较于前面提到的BufferedReader/Writer和Fil ...
- JAVA WEB学习笔记(三):简单的基于Tomcat的Web页面
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- Java第三次作业——面向对象基础(封装)
Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...
- Typescript 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
随机推荐
- js 时间
<html> <head> <meta charset="utf-8" /> <title></title> <s ...
- JavaScript高级程序设计:第十二章
DOM1级主要定义的是HTML和XML文档的底层结构.DOM2和DOM3级则在这个结构的基础上引入了更多的交互能力,也支持了更高级的XML特性.为此DOM2和DOM3级分为许多模块,这些模块如下: D ...
- hdu_3182_Hamburger Magi(状压DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3182 题意:有n个汉堡,做每个汉堡需要消耗一定的能量,每个汉堡对应一定的价值,且只能做一次,并且做当前 ...
- word2vec c代码使用说明
摘要: 1 分词 将文本语料进行分词,以空格,tab隔开都可以.生成分词后的语料 2 训练 对分词后的语料test.txt 进行训练得到模型文件vectors.bin /word2vec -train ...
- oc唯一标时一部设备
ios7之前可以使用mac地址 ios7之后首先创建两个类 #import MyKeyChainManager.h @implementation MyKeyChainManager : NSObje ...
- Ubuntu 网管服务器配置
1.设置Linux内核支持ip数据包的转发 echo "1" > /proc/sys/net/ipv4/ip_forward or vi /etc/sysctl.conf ...
- ILMerge 简单使用
ILMerge是合并.net的assembly的工具,最新版的支持.net 4.0的ILmerge下载: http://www.microsoft.com/downloads/details.aspx ...
- hadoop native
http://blog.csdn.net/benben85/article/details/4161134 http://stackoverflow.com/questions/19943766/ha ...
- Singleton ——运行时全局唯一对象
Singleton 运行时全局唯一对象 Singleton模式只解决一个问题,如何做到运行时创建一个全局唯一的对象? 1:隐藏类的实例化操作,即将构造函数声明为private或protected.任何 ...
- c语言scanf详解
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键 ...