java - 为什么方法中输入的最后一个字符串首先被打印?
问题描述
import java.util.*;
public class Hello {
public static void undoOper(String str) {
List<Character> lis = new ArrayList<>();
char[] arr = str.toCharArray();
for (char ch : arr) {
lis.add(ch);
}
for (int i = 0; i < lis.size(); i++) {
if (lis.get(i) == '^') {
lis.remove(i);
lis.remove(i - 1);
i = i - 2;
}
}
if (lis.size() == 0)
System.out.print("-1");
for (int i = 0; i < lis.size(); i++) {
System.out.print(lis.get(i));
}
System.out.println();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String[] str = new String[N];
for (int i = 0; i < N; i++) {
str[i] = sc.nextLine();
}
for (int i = 0; i < N; i++) {
undoOper(str[i]);
}
}
}
该程序用于撤消操作该程序接受 N 个字符串值。字符 ^ 表示清除上一个字符的撤消操作。
输入:
Hey ^goooo^^glee^
ora^^nge^^^^
输出:
Hey google
-1(since all char gets erased)
我的输出:
-1
Hey google
解决方案
final static Pattern pattern = Pattern.compile("\\^", Pattern.MULTILINE);
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); //because \n is appended with previous nextInt
sc.nextLine();
String[] outPut = new String[N];
for (int i = 0; i < outPut.length; i++) {
String input = sc.nextLine();
Matcher matcher = pattern.matcher(input);
input = matcher.replaceAll("");
outPut[i] = input;
}
sc.close();
System.out.println(Arrays.asList(outPut));
}
看看这是否对你有帮助
推荐阅读
- typescript - Electron-renderer 不会从文件或 webpack-dev-server 加载 webpack 包
- tensorflow - 节点和操作之间的区别
- reactjs - 我想在模拟 promise 方法时返回两个不同的响应
- python - 我想在 RSS 提要描述标签中获取图片链接
- javascript - 如何根据标签等条件删除子元素,
- c# - IIS 应用程序池已关闭,事件 ID 为 5009
- java - Hibernate & MariaDB auto_increment 没有通过级联正确设置 FK
- sql - 如何避免将来在 sql server 中出现重复
- database - 使用位置运算符更新 mongoengine 中的文档仅更新数组中的第一个元素
- javascript - call() a function within its own context