之前写过在瞎写,今天才懂了一点点
- StringBuffer转String/sb.tostring方法
- String转StringBuffer /StringBuffer sb=new StringBuffer (String);
- Sql查询语句用StringBuffer更好
- 链式编程sb.insert().append()
- 有replace(start,end,str)
- StringBuilder操作一样但是是多线程
-
str.charAt(i) StringBuffer str 转换成字符
return str == null ? null : str.toString().replaceAll(" ", "%20");
我离一个成熟的代码员真的还差的好远呐,字符串的操作替换空格
-
package offer; import sun.font.FontRunIterator; /* 字符串相关操作 StringBuffer 可变字符序列 线程安全 链式编程 增删改查 翻转 tostring 1 替换空格 */ public class Test23 { /** * for循环直接遍历 暴力破解法 * * @param str */ public static String replace(StringBuffer str) { //声明一个新的StringBuffer进行存储 StringBuffer res = new StringBuffer(); for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == ' ') { res.append("%20"); } else res.append(str.charAt(i)); } return res.toString(); } /** * 用自带的方法 * 人家一行的语句 你都没有判空你个小垃圾 * @param str * @return * 原有空间字符移动 从后往前移动 更改时间最少 * 注意数组越界问题 * int old_length = str.length() - 1; * str.setLength( str.length() + count * 2); * int new_length = str.length() -1 ; * * @param str * @return */ public static String replace2(StringBuffer str) { //计算增加长度 int count = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == ' ') count++; } //设置新的SB长度 int old_length = str.length() - 1; str.setLength(str.length() + count * 2); int new_length = str.length() - 1; //将新的长度赋值给原来的字符缓冲 //循环把数值给后移 //计算指针j for (int j = old_length; j >= 0; j--) { //倒叙填充 if (str.charAt(j) == ' ') { str.setCharAt(new_length--, '0'); str.setCharAt(new_length--, '2'); str.setCharAt(new_length--, '%'); } else { str.setCharAt(new_length--, str.charAt(j)); } } return str.toString(); } public static void main(String[] args) { //StringBuffer 的构造方法 StringBuffer str = new StringBuffer("We are happy"); System.out.println(replace(str)); System.out.println(replace2(str)); } }
旋转字符+左旋字符
package offer; /* 翻转字符串跟左旋 */ public class Test25 { public static char[] ReverseSentence(String str){ if(str == null) return null; if(str.length() == 0) return str.toCharArray(); char chars[] = str.toCharArray(); reverse(chars, 0, str.length() - 1); //这段代码可以背诵了 int start = 0; for(int i=0; i<str.length(); i++){ if(chars[i] == ' '){ reverse(chars, start, i - 1); start = i + 1; } } reverse(chars, start, str.length() - 1); return chars; } private static void reverse(char chars[], int begin, int end){ if(chars == null) return; if(begin == end) return; char c; while(begin < end){ c = chars[begin]; chars[begin] = chars[end]; chars[end] = c; begin++; end--; } } public static char[] LeftRotateString(String str, int n){ if(str == null) return null; char chars[] = str.toCharArray(); // 先分段旋转 reverse(chars, 0 , n - 1); reverse(chars, n, str.length() - 1); // 最后整体旋转 reverse(chars, 0, str.length() - 1); return chars; } //左移字符串 按照顺序 感觉是revers的变形 public static String reverseLeft(String str, int n) { int length = str.length(); if (length < 1) return null; //先求余数 n = n % length; // 裁剪 String temp = str.substring(0, n); // 拼接然后补到后面 str += temp; //输出的时候 并没有真正的删除要从第n位置开始删除 return str.substring(n); } public static void main(String[] args) { String str = "I am a student."; char[] chars = str.toCharArray(); System.out.println(ReverseSentence(str)); System.out.println(reverseLeft(str, 2)); } }
好像感觉自己在欺骗自己一样,每天这么刷题,看不到出路呀