4.4 字符串(6)
方法
- 往往涉及到字符串的操作,经常使用的方法是字符串两两拼接解决一些跟排序有关的问题。
- 正则
`boolean matches(String regex) : 正则匹配 - 字符串方法
String.valueOf(byte / short / char / int / long / float / double / char[ ])
Double.valueOf(String / double)
注意点
- 暂无
目录
- 字符串不能表示数值
- 替换空格
- 把数组排成最小的数
- 左旋转字符串
- 翻转单词顺序列
- 把字符串转换成整数
字符串不能表示数值
请实现一个函数用来匹配包括'.'和''的正则表达式。模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配
- 最优解:正则表达式
public boolean match(char[] str, char[] pattern) {
return String.valueOf(str).matches(String.valueOf(pattern));
}
替换空格
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll(" ", "%20");
}
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
public String PrintMinNumber(int [] numbers) {
// 比较数字a、b组合起来数字大小的方法是,ab和ba拼接,小的那个就是最小组合方式
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
int a = Integer.valueOf(numbers[i] + "" + numbers[j]);
int b = Integer.valueOf(numbers[j] + "" + numbers[i]);
if (b < a) {
int temp = numbers[j];
numbers[j] = numbers[i];
numbers[i] = temp;
}
}
}
String str = "";
for (int i = 0; i < numbers.length; i++) {
str += numbers[i];
}
return str;
}
左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
public String LeftRotateString(String str,int n) {
if (str == null) return null;
int len = str.length();
str += str;
return len == 0 ? "" : str.substring(n % len, len + n % len);
}
翻转单词顺序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
public String ReverseSentence(String str) {
if (str == null || str.trim().equals("")) {
return str;
}
String[] arr = str.split(" ");
StringBuilder sb = new StringBuilder();
for (int i = arr.length - 1; i >= 0; i--) {
sb.append(arr[i]);
if (i > 0) sb.append(" ");
}
return sb.toString();
}
把字符串转换成整数
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
public int StrToInt(String str) {
if (str == null || str.length() == 0) {
return 0;
}
boolean isValid = str.matches("[+-]?[1-9]+[0-9]*");
if (!isValid) return 0;
char[] arr = str.toCharArray();
boolean minus = false;
if (arr[0] == '-') minus = true;
int ans = 0;
for (int i = 0; i < arr.length; i++) {
if (i == 0 && (arr[i] == '+' || arr[i] == '-')) {
continue;
}
ans = ans * 10 + (arr[i] - '0');
}
return minus ? -ans : ans;
}