题目如下:
String str = " i am a programmer";其中空格个数分别是1,2,3个
要求按照单词反转,也就是最后输出“programmer a am i"; 空格数分别为3,2,1。
1:用split函数方式:
- public static void reverse() {
- String s = "i am a programmer"; // 几个空格的数量分别为1,2,3
- String[] eg = s.split(" ", -1);
- String result = "";
- for (int i = eg.length - 1; i > 0; i--) {
- result += eg[i] + " ";
- }
- result += eg[0]; // 这里要注意第一个字符的前面是不能增加空格的。否则就多了一个空格
- System.out.println(result);
这里一直有一个模糊点,就是如果对于连续多个空格在一起,但是要求分割的时候只用一个空格,其它的空格还不能删除,到底怎么办?需要看看split函数是怎么处理的。为了可视,将空格换作”,“。
可以改变字符串之间的”,“的个数来查看,从运行结果可以看到,在分割字符串”z,,,z“时,首先把字符串分为”z“和”,,z“两个字符串,第二步操作字符串”,,z“,分为一个空字符串和”,z“字符串,继续分为一个空字符串和一个z,最后结果如下:
z
z
- String oldStr = "z,,,z";
- String[] strs = oldStr.split(",");
- for(String str:strs) {
- System.out.println(str);
- }
可以改变字符串之间的”,“的个数来查看,从运行结果可以看到,在分割字符串”z,,,z“时,首先把字符串分为”z“和”,,z“两个字符串,第二步操作字符串”,,z“,分为一个空字符串和”,z“字符串,继续分为一个空字符串和一个z,最后结果如下:
z
z
2:不用split函数:
- String oldstr="I am a programmer";
- int index = oldstr.lastIndexOf(" ");
- System.out.println(index);
- while (index >= 0) {
- System.out.print(oldstr.substring(index + 1) + " ");
- oldstr = oldstr.substring(0,index);
- index = oldstr.lastIndexOf(' ');
- }
- System.out.println(oldstr);
为了能清楚的看到运行结果,我们把空格换为“,”。
- String oldstr="I,am,,a,,,programmer";
- int index = oldstr.lastIndexOf(",");
- while (index >= 0) {
- System.out.print(oldstr.substring(index + 1) + ",");
- oldstr = oldstr.substring(0,index);
- index = oldstr.lastIndexOf(',');
- System.out.println(index);
- }
这样的话,里面有两点如果不清楚的话就会导致不理解,首先subString(index)方法,是值从第index个字符开始往后的字符串。第二subString(0,index)的字符串不包括index位的字符。
这两种方法总算是搞明白了。