用java写一个英文句子反转的方法

jason_kou 2008-06-02 10:06:41
用java写一个英文句子反转的方法:

/**
* 要求:将一个英文句子反转, e.g. much. very you love I => I love you very much.
* 但不能使用String的库函数:split,indexOf,lastIndexOf,subString
*
*/

...全文
1077 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenny_chen 2008-06-02
  • 打赏
  • 举报
回复
不好意思,上面有个逻辑上的瑕疵,这里改正一下:


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"));
}
}

jason_kou 2008-06-02
  • 打赏
  • 举报
回复
8楼答案最为简单,赞一个
zenny_chen 2008-06-02
  • 打赏
  • 举报
回复
献丑了:


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"));
}
}

youzi530 2008-06-02
  • 打赏
  • 举报
回复
public class StringBuffer1{
public static void main(String[]args){
StringBuffer sb=new StringBuffer("I love you very much.");
StringBuffer str=sb.reverse();
System.out.println(str);
}
}
楼主我刚才写了这种简单的方法,不知是不是呢?
anqini 2008-06-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jiangnaisong 的回复:]
答:英文句子反转,单词间的空格数要保持原样才行啊!
代码很简单:

Java code
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;

[/Quote]

8错8错!江奶松~
云上飞翔 2008-06-02
  • 打赏
  • 举报
回复
答:英文句子反转单词间的空格数保持原样才行啊!
代码很简单:

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.
kingofvc 2008-06-02
  • 打赏
  • 举报
回复
StringTokenizer 来读取以空格为分隔的String
定义一个String 比如result
while(tokenizer.hasMoreToken()){
result=tokenizer.nextToken()+" "+result;
}
云上飞翔 2008-06-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bootupnow 的回复:]
那就用StringBuffer的reverse(),很好很强大!
[/Quote]
答:不,不是的.用StringBuffer的reverse()得到的结果是不正确的,不是楼主要的那个.
jason_kou 2008-06-02
  • 打赏
  • 举报
回复
public class ReversalWords {
/**
*
* @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"));
}
}

这个感觉有点投机,,谁还有比较巧的办法?
haoxiongok 2008-06-02
  • 打赏
  • 举报
回复
关注哈
jason_kou 2008-06-02
  • 打赏
  • 举报
回复
如果用这个就太简单了,没有其他简单方法么?
bootupnow 2008-06-02
  • 打赏
  • 举报
回复
那就用StringBuffer的reverse(),很好很强大!
jason_kou 2008-06-02
  • 打赏
  • 举报
回复
自己顶一下,嘎嘎,基础题。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧