split(regex, limit)
indexOf(str)
split使用正则分割。
开始以为正则慢于indexOf,其实不对。
后来学习字符串查找的3个实现:朴素算法、正则DFA、KMP,方知jdk如此实现很有道理。正则DFA和KMP的时间复杂度是O(n),而朴素是O(m(n-m+1))。
java实现的split在regex长度是1且不是正则的内置字符,或长度是2但其实是转义字符时会直接使用indexOf,因为此时m=1。
所以查找时尽量用正则或KMP,而不是indexOf。
split(regex, limit)
indexOf(str)
split使用正则分割。
开始以为正则慢于indexOf,其实不对。
后来学习字符串查找的3个实现:朴素算法、正则DFA、KMP,方知jdk如此实现很有道理。正则DFA和KMP的时间复杂度是O(n),而朴素是O(m(n-m+1))。
java实现的split在regex长度是1且不是正则的内置字符,或长度是2但其实是转义字符时会直接使用indexOf,因为此时m=1。
所以查找时尽量用正则或KMP,而不是indexOf。