处理字符串


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()方法来进行字符串截取
  1. 只传一个参数:subString(int beginIndex) 将字符串从索引号为beginIndex开始截取,一直到字符串末尾。(注意索引值从0开始);
String sb = "asdfghj";
String str = sb.substring(2);
System.out.println(str);
  1. 传入两个参数: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')