`
atell
  • 浏览: 161694 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

将一个英文句子反转

 
阅读更多

将一个英文句子反转, e.g. much. very you love I => I love you very much.

 

import java.util.Stack;
import java.util.StringTokenizer;

/**
 * 将一个英文句子反转, e.g. much. very you love I => I love you very much.
 */
public class WordsReverse {

    // spilt StringBuilder
    public static String reverse1(String str) {
        if (str == null || str.trim().equals("")) {
            return str;
        }
        StringBuilder re = new StringBuilder();
        String[] words = str.split(" ");
        for (int length = words.length, i = length - 1; i >= 0; i--) {
            re.append(words[i]);
            if (i != 0) {
                re.append(" ");
            }
        }
        return re.toString();
    }

    // charAt StringBuilder
    public static String reverse2(String str) {
        if (str == null || str.trim().equals("")) {
            return str;
        }
        StringBuilder re = new StringBuilder(str.length());
        int pos = 0;
        for (int length = str.length(), i = 0; i < length; i++) {
            char ch = str.charAt(i);
            if (ch == ' ') {
                pos = 0;
            }
            re.insert(pos, ch);
            if (ch != ' ') {
                pos++;
            }
        }
        return re.toString();
    }

    // StringTokenizer Stack StringBuilder
    public static String reverse3(String str) {
        if (str == null || str.trim().equals("")) {
            return str;
        }
        StringTokenizer token = new StringTokenizer(str, " ");
        Stack<String> stack = new Stack<String>();
        while (token.hasMoreElements()) {
            stack.push(token.nextToken());
        }
        StringBuilder re = new StringBuilder(str.length());
        for (int length = stack.size(), i = 0; !stack.isEmpty(); i++) {
            re.append(stack.pop());
            if (i != length - 1) {
                re.append(" ");
            }
        }
        return re.toString();
    }

    // charAt Stack StringBuilder
    public static String reverse4(String str) {
        if (str == null || str.trim().equals("")) {
            return str;
        }
        Stack<String> stack = new Stack<String>();
        final int RESET = -1;
        int start = RESET;
        for (int length = str.length(), i = 0; i < length; i++) {
            char ch = str.charAt(i);
            if (ch != ' ' && start == RESET) {// word started
                start = i;
            } else if ((ch == ' ') && start != RESET) {// find word
                stack.push(str.substring(start, i));
                start = RESET;
            } else if ((i == length - 1) && start != RESET) {// find word
                stack.push(str.substring(start, i + 1));
                start = RESET;
            }
        }

        StringBuilder re = new StringBuilder(str.length());
        for (int length = stack.size(), i = 0; !stack.isEmpty(); i++) {
            re.append(stack.pop());
            if (i != length - 1) {
                re.append(" ");
            }
        }
        return re.toString();
    }

    public static void main(String[] args) {
        long beginTime = System.currentTimeMillis();
        System.out.println(reverse1(null) + "|");
        System.out.println(reverse1("") + "|");
        System.out.println(reverse1(" ") + "|");
        System.out.println(reverse1("  ") + "|");
        System.out.println(reverse1("   ") + "|");
        System.out.println(reverse1("  BB ") + "|");
        System.out.println(reverse1(" AA BB ") + "|");
        System.out.println(reverse1("ABC  is a pig.") + "|");
        System.out.println(reverse1(" ABC  is a pig. ") + "|");
        reverse1(longString);
        System.out.println("spend time:"
                + (System.currentTimeMillis() - beginTime));

        beginTime = System.currentTimeMillis();
        System.out.println(reverse2(null) + "|");
        System.out.println(reverse2("") + "|");
        System.out.println(reverse2(" ") + "|");
        System.out.println(reverse2("  ") + "|");
        System.out.println(reverse2("   ") + "|");
        System.out.println(reverse2("  BB ") + "|");
        System.out.println(reverse2(" AA BB ") + "|");
        System.out.println(reverse2("ABC  is a pig.") + "|");
        System.out.println(reverse2(" ABC  is a pig. ") + "|");
        reverse2(longString);
        System.out.println("spend time:"
                + (System.currentTimeMillis() - beginTime));

        beginTime = System.currentTimeMillis();
        System.out.println(reverse3(null) + "|");
        System.out.println(reverse3("") + "|");
        System.out.println(reverse3(" ") + "|");
        System.out.println(reverse3("  ") + "|");
        System.out.println(reverse3("   ") + "|");
        System.out.println(reverse3("  BB ") + "|");
        System.out.println(reverse3(" AA BB ") + "|");
        System.out.println(reverse3("ABC  is a pig.") + "|");
        System.out.println(reverse3(" ABC  is a pig. ") + "|");
        reverse3(longString);
        System.out.println("spend time:"
                + (System.currentTimeMillis() - beginTime));

        beginTime = System.currentTimeMillis();
        System.out.println(reverse4(null) + "|");
        System.out.println(reverse4("") + "|");
        System.out.println(reverse4(" ") + "|");
        System.out.println(reverse4("  ") + "|");
        System.out.println(reverse4("   ") + "|");
        System.out.println(reverse4("  BB ") + "|");
        System.out.println(reverse4(" AA BB ") + "|");
        System.out.println(reverse4("ABC  is a pig.") + "|");
        System.out.println(reverse4(" ABC  is a pig. ") + "|");
        reverse4(longString);
        System.out.println("spend time:"
                + (System.currentTimeMillis() - beginTime));

    }

    static String t = "das dasd sad asd sdsa as as dasd  sdasdad adasdsd as dsa d asd sa d asd as das d sad asdd as das d asd as das d asd as d sad a sd asd as da sda ds ";
    static String longString = t + t + t + t + t + t + t + t + t + t + t + t
            + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t
            + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t + t;

}

 输出:

null|
|
 |
  |
   |
BB  |
BB AA |
pig. a is  ABC|
pig. a is  ABC |
spend time:14
null|
|
 |
  |
   |
 BB  |
 BB AA |
pig. a is  ABC|
 pig. a is  ABC |
spend time:8
null|
|
 |
  |
   |
BB|
BB AA|
pig. a is ABC|
pig. a is ABC|
spend time:5
null|
|
 |
  |
   |
BB|
BB AA|
pig. a is ABC|
pig. a is ABC|
spend time:3

 

 

20120425写的新方法:

import java.util.Stack;

public class Demo {

	/**
	 * 反转字符串的单词顺序
	 */
	public static void main(String[] args) {
		String str = "hello world is demo";
		System.out.println(reverse(str));
	}

	static String reverse(String str) {
		StringBuilder sb = new StringBuilder(str.length());

		Stack<Character> stack = new Stack<Character>();
		int i = str.length() - 1;
		while (i >= 0) {//从尾部开始遍历
			char ch = str.charAt(i);
			if (ch == ' ') {//遇到空格,则说明找到单词,将单词取出
				while (!stack.isEmpty()) {
					sb.append(stack.pop());
				}
				sb.append(ch);
			} else {//遇到非空格,则字符入栈
				stack.push(ch);
			}
			i--;
		}
		while (!stack.isEmpty()) {
			sb.append(stack.pop());
		}
		return sb.toString();

	}

}
 

 

分享到:
评论

相关推荐

    给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格

    给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-&gt; “mi xiao hello” 输入描述: 输入数据有多组,每组占一行...

    输入一个英文句子,翻转句子中单词的顺序

    ### 输入一个英文句子,翻转句子中单词的顺序 #### 题目背景与解析 在计算机编程领域,字符串操作是非常基础且重要的部分。对于应聘者来说,掌握字符串相关的算法和技巧是必不可少的能力之一。微软作为全球知名的...

    Python给定一个句子倒序输出单词以及字母的方法

    本文将详细介绍如何实现一个功能:给定一个句子,不仅将其单词顺序倒序,还将每个单词中的字母顺序也进行倒序。这种方法在文本处理、算法设计等领域有着广泛的应用。 #### 知识点一:字符串分割与反转 为了实现这...

    基于java采用管道过滤器风格编写一个英文句子转大写并倒序的功能

    在Java编程中,"基于java采用管道过滤器风格编写一个英文句子转大写并倒序的功能"是一项常见的任务,它涉及到输入输出流、字符转换以及字符串处理等多个知识点。这一过程通常利用Java的IO流和过滤器(Filter)设计...

    反转字符串1

    4. **循环结构**:在`ReverseSentence`函数中,使用了一个外层循环来遍历整个句子,找到每个单词的开始和结束位置;内层循环用于反转单词内的字符。通过这种方式,可以有效地处理句子中的每个单词。 5. **边界条件...

    python将一个英文语句以单词为单位逆序排放的方法

    本文将详细介绍如何将一个英文语句以单词为单位进行逆序排放。这个方法适用于各种需要反转单词顺序的场景,例如处理输入的句子或处理自然语言处理任务。 首先,我们需要理解问题的核心——如何在保持单词完整性的...

    Java实现的简单字符串反转操作示例

    Java中提供了一个StringBuffer类,该类提供了一个reverse()方法,可以将字符串反转。下面是一个使用StringBuffer类的reverse()方法的示例程序: ```java public class StringReverse { public static void main...

    python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip

    给定一个英文句子(字符串),要求我们反转其中的单词顺序,但保持单词内部的字符顺序不变。此外,句子中的所有单词都由空格分隔,且句子中可能存在多个连续的空格。例如,输入字符串 "Let's take LeetCode ...

    Python字符串处理实现单词反转

    题目要求通过Python编程实现一个功能,即给定一个包含英文单词的字符串,将其按照单词进行反转,同时保持原有的空格位置不变。例如,将字符串`"I love China!"`转换为`"China! love I"`。 #### 解决方案概述 针对这...

    linux下字符串去重,英文句子倒序功能实现

    我们可以用一个辅助数组记录每个字符是否出现过,然后遍历原始字符串,只保留未出现过的字符。以下是一个简单的C++实现: ```cpp #include #include using namespace std; string removeDuplicates(string str) ...

    java-leetcode面试题解双指针之第151题反转字符串中的单词.zip

    当找到单词边界时,我们可以将左右指针之间的子串反转,然后继续寻找下一个单词。 以下是实现这个功能的Java代码示例: ```java public class Solution { public String reverseWords(String s) { if (s == null...

    AC-学号-姓名- 题号10091

    1. 输入:一个不超过80个字符的英文句子,由单词和空格组成,单词由英文字母构成,单词间只有一个空格。 2. 输出:将输入句子中的单词顺序反转后的新句子,保持原有的单词和空格。 在Python中,可以按照以下步骤来...

    WordReverser:反转字符串中的单词

    目的 编写应用程序来反转字符串中的单词。 结果 假设条件 注意“字符串中的反向单词”是不明确的。 标点符号也可以通过多种方式处理。 反转“我太——高兴了!...考虑逐句颠倒并在每个句子的末尾保留标点符号。

    用java编写的回文字输出(单词倒序)

    本篇将重点讲解如何利用Java编程语言实现一个回文字(单词倒序)的功能。这种功能常用于文本处理,比如反转一句话的单词顺序,但保持单词内部字符的顺序不变。 首先,我们需要理解问题的核心:将输入的句子按单词...

    非常有用的101道算法部分常见面试题(英文).txt

    给定一个字符数组,其中形成一个由单词组成的句子,设计一种高效算法来反转单词的顺序(而非单个字符)。这可以通过两次反转来实现:首先整体反转整个字符串,然后逐个反转每个单词。 ### 8. 地球上的特殊位置 ...

    英语写作表逻辑关系的关联词PPT课件.pptx

    逻辑关系的关联词是英语写作中非常重要的一部分,它们可以帮助我们明确地表达思想、建立逻辑关系和连接句子。下面我们将对这些关联词进行详细的介绍和解释。 1. 表顺承、补充与递进 在英语写作中,我们经常使用...

    程序员面试之无敌天书

    - **问题描述**:输入一个英文句子,翻转句子中单词的顺序,但单词内部字符的顺序保持不变。 - **解决方案**:首先反转整个句子,然后逐个反转每个单词,最后得到单词顺序反转但每个单词内部字符顺序不变的结果。 *...

    腾讯2016实习生笔试v2.docx

    编写一个函数`void reverseSentence(char *pStr, int iLen)`,该函数接收一个字符数组`pStr`作为输入,并将这个数组中的英文句子进行倒置。例如,若输入为"iamondutytoday",则输出应为"todaydutyonami"。 #### ...

    英语翻译的十大方法.doc

    与拆句法相反,合并法是将多个简短的句子组合成一个复杂的句子,以体现原文的连贯性和紧凑性,尤其在英语中,长句能更好地表达复杂的逻辑关系。 6. 正译法 正译法是指按照通常的翻译顺序,直接对应原文的结构和词汇...

    [第一部分]精选微软等公司数据结构+算法经典面试100题[1-40题]

    - 给定一个英文句子,编写程序反转每个单词的字符顺序,但保留单词的顺序不变。 **解题思路:** - 分离出每个单词,然后反转每个单词中的字符顺序。 - 最后重新组合单词形成最终的结果。 ### 总结 这些面试题目...

Global site tag (gtag.js) - Google Analytics