处理字符串
1、判断String是否为空串、Null串
空串和null串的区别:
-
null
表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。 -
""
表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。 -
null
不是对象,""
是对象,所以null
没有分配空间,""
分配了空间
java语法
function1耗时:80ms
function2耗时:54ms
function3耗时:64ms
function4耗时:65ms
/**
* 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低;
* 方法二: 比较字符串长度, 效率高, 是最好的一个方法;
* 方法三: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二;
* 方法四: 这是一种比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多;
*/
if (str == null || "".equals(str)) {
}
if (str == null || str.length() <= 0) {
}
if (str == null || str.isEmpty()) {
}
if (str == null || str == "") {
}
python语法
判断字符串为空
#方法一
if oneString:
print "not empty"
else:
print "empty"
#方法二
if oneString == "":
print "empty"
else:
print "not empty"
2、字符串拼接
java语法 - 三种方式
加号的方式最慢,其他两种方式各有优点。
- 使用
+
号。当左右两个量其中有一个为String类型时,用plus方式可将两个量转成字符串并拼接。
String a = "hello";
String b = "world";
String c=a+b;
虽然编译器对字符串的加号做了优化,它会使用StringBuilder的append方法进行追加,而它最终通过toString方法转换成String字符串
str = new StringBuilder(str).append("JTZen9").toString();
-
concat
方式。当两个量都为String类型且值不为null时,可以用concat方式。
String a="a";
String b="b";
String c= a.concat(b);
-
append
方式。当需要拼接至少三个量的时候,可以考虑使用StringBuffer#append()以避免临时字符串的产生
StringBuffer buf=new StringBuffer()
buf.append("a");
if(someCondition){
buf.append("b");
}
buf.append("c");
String d=buf.toString();
python语法
- 使用加号
>>> a, b = 'hello', ' world'
>>> a + b
'hello world'
- 使用
%
操作符。在 Python 2.6 以前,%
操作符是唯一一种格式化字符串的方法,它也可以用于连接字符串。
print('%s %s' % ('hello', 'world'))
- 使用
format
方法。format 方法是 Python 2.6 中出现的一种代替 % 操作符的字符串格式化方法,同样可以用来连接字符串。
print('{}{}'.format('hello', ' world'))
- 使用
join
内置方法。字符串有一个内置方法join,其参数是一个序列类型,例如数组或者元组等。
print('-'.join(['aa', 'bb', 'cc']))
- 使用
f-string
方式。Python 3.6 中引入了 Formatted String Literals(字面量格式化字符串),简称 f-string,f-string
是%
操作符和format
方法的进化版,使用 f-string 连接字符串的方法和使用 %操作符、format 方法类似。
>>> aa, bb = 'hello', 'world'
>>> f'{aa} {bb}'
'hello world'
3、截取字符串获取子字符串
java语法-三种方式
- 方法一:通过split()
String str = " 01:??? ";
String[] strArray = str.split(":");
System.out.println(strArray[0].trim());
System.out.println(strArray[1].trim());
- 方式二:通过subString()方法来进行字符串截取
- 只传一个参数:
subString(int beginIndex)
将字符串从索引号为beginIndex开始截取,一直到字符串末尾。(注意索引值从0开始);
String sb = "asdfghj";
String str = sb.substring(2);
System.out.println(str);
- 传入两个参数:
substring(int beginIndex, int endIndex)
从索引号beginIndex开始到索引号endIndex结束(返回结果包含索引为beginIndex的字符不包含索引我endIndex的字符),如下所示:
String sb = "7xxxx3234@qq.com";
String str = sb.substring(0, 8);
System.out.println(str);
- 方法三:通过
正则表达式
解决
String str = "one123";
String regex = "(?<=one)(?=123)";
String[] strs = str.split(regex);
for (int i = 0; i < strs.length; i++) {
System.out.printf("strs[%d] = %s%n", i, strs[i])
}
python语法
str = ’0123456789′
print str[0:3] #截取第一位到第三位的字符
print str[:] #截取字符串的全部字符
print str[6:] #截取第七个字符到结尾
print str[:-3] #截取从头开始到倒数第三个字符之前
print str[2] #截取第三个字符
print str[-1] #截取倒数第一个字符
print str[::-1] #创造一个与原字符串顺序相反的字符串
print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
print str[-3:] #截取倒数第三位到结尾
print str[:-5:-3] #逆序截取,具体啥意思没搞明白?
字符串查找
java语法
- String中取单个字符,使用
charAt
方法
String words = "today,monday,sunday";
System.out.println(words.charAt(0)); //结果:t
System.out.println(words.charAt(1)); // 结果:o
System.out.println(words.charAt(8)); // 结果:n
- 子串查找
Java中字符串中子串的查找共有四种方法,如下:
1、int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。
2、int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。
3、int lastIndexOf(String str) :返回在此字符串中最右边出现的指定子字符串的索引。
4、int lastIndexOf(String str, int startIndex) :从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。
python语法
- 查找
是否存在
某个子串。find()方法:查找子字符串,若找到返回从0开始的下标值,若找不到返回-1
str.find(sub[, start[, end]])
info = 'abca'
print info.find('a')##从下标0开始,查找在字符串里第一个出现的子串,返回结果:0
info = 'abca'
print info.find('a',1)##从下标1开始,查找在字符串里第一个出现的子串:返回结果3
info = 'abca'
print info.find('333')##返回-1,查找不到返回-1
- 查找子串的
索引
。python 的index方法是在字符串里查找子串第一次出现的位置,类似字符串的find方法,不过比find方法更好的是,如果查找不到子串,会抛出异常,而不是返回-1
info = 'abca'
print info.index('a')
print info.index('33')