用java写一个英文句子反转的方法:/**
* 要求:将一个英文句子反转, e.g. much. very you love I => I love you very much.
* 但不能使用String的库函数:split,indexOf,lastIndexOf,subString
*
*/
* 要求:将一个英文句子反转, e.g. much. very you love I => I love you very much.
* 但不能使用String的库函数:split,indexOf,lastIndexOf,subString
*
*/
解决方案 »
- 如何打印2是n次方的集合
- 谁那有java泛型的视频呀?还有注册工厂是怎么回事呀?
- jsp相关问题!!!!等!!急
- 异常:[Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 2。
- 求已知P1,P2连成直线,求该两点在直线上中间点坐标,谢
- Java , Installanywhere 在 Redhat 上的中文问题解决方法
- 要死人了!!!!!求求各位大虾指点指点啊!!!!!!!!
- 高分求助,简单问题!!
- 看官们注意HttpURLConnection!!!
- comboBox返回的getSelectItem是一个object
- 问一问构造器的问题,麻烦各位帮帮忙啊
- 请高手对初学者学习JAVA提几点建议,万分感激。
/**
*
* @author 流浪的鱼
* @version 1.0
*
*/
public static String doReversal(String str) {
char[] c = str.toCharArray();
String result = "";
StringBuffer sb = new StringBuffer();
for (int i = c.length - 1; i >= 0; i--) {
if (c[i] != ' ') {
sb.append(c[i]);
}
if (c[i] == ' ' || i == 0) {
result = result + sb.reverse().toString();
if (i != 0)
result += " ";
sb.delete(0, sb.length());
}
}
return result;
} public static void main(String[] args) {
System.out.println(doReversal("much. very you love I"));
}
}
这个感觉有点投机,,谁还有比较巧的办法?
定义一个String 比如result
while(tokenizer.hasMoreToken()){
result=tokenizer.nextToken()+" "+result;
}
代码很简单:public static String reverse(String s)//句子反转单词之间是空格,保持单词间空格原样
{
int pos=0;
StringBuilder sb=new StringBuilder();
for(int i=0;i<s.length();i++)
{
char c=s.charAt(i);
if(c==' ')
{
pos=0;
}
sb.insert(pos, c);
if(c!=' '){pos++;}
}
return sb.toString();
}若:String s="much. very you love I";
System.out.println(reverse(s));
结果是:
I love you very much.
public static void main(String[]args){
StringBuffer sb=new StringBuffer("I love you very much.");
StringBuffer str=sb.reverse();
System.out.println(str);
}
}
楼主我刚才写了这种简单的方法,不知是不是呢?
import static java.lang.System.out;
class StringReverse {
public static boolean isBlank(char c) {
return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
}
public static String sentenceReverse(String src) {
if(src == null)
return null;
char[] contents = src.toCharArray();
final int length = contents.length;
if(length < 2)
return src;
char[] res = new char[length];
int startPos = -1, endPos = -1, destCursor=0;
boolean blankState = true;
for(int srcCursor=length-1; srcCursor>=0; srcCursor--) {
if(isBlank(contents[srcCursor])) {
if(!blankState) {
for(int i=endPos; i<=startPos; i++)
res[destCursor++] = contents[i];
endPos = -1;
blankState = true;
}
res[destCursor++] = contents[srcCursor];
}
else {
if(blankState) {
blankState = false;
endPos = startPos = srcCursor;
}
else
endPos--;
}
}
if(endPos >= 0) {
for(int i=endPos; i<=startPos; i++)
res[destCursor++] = contents[i];
}
return String.valueOf(res);
}
}
public class Test
{
public static void main(String[] args) {
out.println(StringReverse.sentenceReverse("much. very you love I"));
}
}
import static java.lang.System.out;
class StringReverse {
public static boolean isBlank(char c) {
return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
}
public static String sentenceReverse(String src) {
if(src == null)
return null;
char[] contents = src.toCharArray();
final int length = contents.length;
if(length < 2)
return src;
char[] res = new char[length];
int startPos = -1, endPos = -1, destCursor=0;
boolean blankState = true;
for(int srcCursor=length-1; srcCursor>=0; srcCursor--) {
if(isBlank(contents[srcCursor])) {
if(!blankState) {
for(int i=endPos; i<=startPos; i++)
res[destCursor++] = contents[i]; blankState = true;
}
res[destCursor++] = contents[srcCursor];
}
else {
if(blankState) {
blankState = false;
endPos = startPos = srcCursor;
}
else
endPos--;
}
}
if(!blankState) {
for(int i=endPos; i<=startPos; i++)
res[destCursor++] = contents[i];
}
return String.valueOf(res);
}
}
public class Test
{
public static void main(String[] args) {
out.println(StringReverse.sentenceReverse("much. very you love I"));
}
}