这是我们的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class reverse {
public static void main(String[] args) throws FileNotFoundException {
File fil = new File("textFile.txt");
Scanner scan = new Scanner(fil);
while (scan.hasNext()) {
String in = scan.nextLine();
in = new StringBuffer(in).reverse().toString();
Pattern replace = Pattern.compile("\\W+");
Matcher matcher = replace.matcher(in);
System.out.println(matcher.replaceAll("\t"));
}
}
}
在我们的textFile.txt中,我们有不同行中的字母,数字和单词。我们希望以相反的顺序打印出来。所以,如果一行是:是的,4巧克力牛奶。我们要打印出来:牛奶巧克力4是的。
我们的代码打印出相反的单词,所以是的,变成了sey。我们不希望它像这样,但不知道如何改变它。我们一直在考虑创建一个堆栈,但我们不知道它如何与Pattern和Matcher一起工作。
答案 0 :(得分:4)
您不应该反转您阅读的行,而是将该行拆分为一个集合并将其反转。 你所做的就是扭转角色,所以你得到了这个:
Yes, 4 Chocolate milk -> klim etalocohC 4 , seY
如果将行拆分为["Yes","4","Chocolate milk"]
,则可以反转该数组/列表。
问题是:我想你想按顺序保留Chocolate milk
,所以你需要定义哪些单词属于一起。如果您的输入始终为<words>, <number> <words>
,则可以首先分割,
,分隔第一个<words>
,然后分隔剩余部分的第一个空格,以便分割数字和第二个{{ 1}}。
更新:试试这个:
<words>
输出应为
String input = "Yes sir, 4 Chocolate milk";
//Pattern is:
//- one or more words separated by whitespace as group 1: ((?:\\w+\\s*)+)
//- a comma
//- optional whitespace: \\s*
//- an integer number as group 2: (\\d+)
//- optional whitespace \\s*
//- an arbitrary rest (which might contain anything) as group 3: (.*)
Pattern p = Pattern.compile( "((?:\\w+\\s*)+),\\s*(\\d+)\\s*(.*)" );
Matcher m = p.matcher( input );
List<String> list = new ArrayList<String>();
while(m.find()) {
list.add( m.group( 1 ) );
list.add( m.group( 2 ) );
list.add( m.group( 3 ) );
}
Collections.reverse( list );
for( String s : list) {
System.out.println(s);
}
请注意,这取决于输入的布局,只是为了提供一个开始。您还需要将其与其他模式匹配逻辑集成。
答案 1 :(得分:1)
尝试使用Scanner
或仅String.split()
来创建行内所有令牌的Array
或Collection
。然后只需使用for
- 循环向后迭代它以重新创建该行。您也可以使用Collections.reverse()
来实现此目的。
答案 2 :(得分:0)
按字分割字符串,将结果保存到字符串数组中,然后显示从最后一个元素到第一个元素的字符串。 代码:
public static void main(String[] args) {
String hello = "bananas 45 guns me likes 3";
String[] reverse_me = hello.split(" ");
// the -1 is because the index starts in zero :-0)
for(int i = reverse_me.length-1; i >= 0 ; i--){
System.out.println(reverse_me[i]);
}
}
输出:
3
likes
me
guns
45
bananas