所以,请耐心等待,因为我在这里有一个很长的问题,我在java中有一些代码使用数组列表来实现堆栈。我需要能够输入命令“push”来向堆栈添加内容。但是我的问题是它必须采用pushSTUFF格式。
“STUFF”是什么,大写,小写,字符串,int等。我一直试图实现这个的方法是使用字符串split方法,其中PUSH是分隔符。然后命令被传递给switch case。
我很快就意识到分裂被丢弃了,至少据我所知,并且开关盒的情况是按顺序输入而不是pushSTUFF。
在考虑这个问题时,我提出了几种可以做到这一点的方法。我只是不知道他们是否可能或如何做到这些。
所以,
有没有办法分割像pushSTUFF这样的字符串并保留两个部分(push和STUFF)
有没有办法从字符串中拆分未知长度或内容的东西(因为我不知道用户输入什么,STUFF未知)
有没有办法告诉switch case寻找pushSTUFF,而不是只推(因为STUFF未知)。
这些都有可能吗?如果是这样,你会推荐什么?
我确信有更好的方法但是因为我还在学习java,所以这些似乎是最好的。此外,我没有发布任何代码,因为我觉得这个问题没有必要。如果你需要的话我会张贴一些。请问,我很乐意帮忙。
(tl; dr)是否可以执行上述1,2或3中的任何一项,如果是,如何执行? 提前谢谢。
答案 0 :(得分:1)
不是拆分字符串,而是可以使用带有组的正则表达式并迭代它的匹配部分(如您所见,拆分的字符将被丢弃)。
对于#1,您可以执行类似(伪代码)的操作:
regex = (push)(.*)
stuff = groups[1]
这也应该涵盖#2,因为它会在推送后匹配所有字符。
我不完全确定你在#3中的要求。
如果您不熟悉java正则表达式,那么有一个正则表达式教程here。
您还可以查看StringTokenizer,它可以选择保留分隔符。
答案 1 :(得分:1)
如果格式始终是push * SOMETHING *为什么你不使用String.substring()?
你可以这样做:
String something = "pushSTUFF".substring(4);
通过这种方式,您将始终获得推送背后的任何内容。
我真的不明白你在没有看到实际代码的情况下想要实现的目标,但你的问题似乎很简单,可以通过这种方式解决。
答案 2 :(得分:0)
您可以搜索任何大写字母并使用String.substring(...)
答案 3 :(得分:0)
使用.indexOf并找到推送:
public class splitstring {
public static void main(String[] args){
String tosplit, part1, part2 = new String();
int ind = 0;
tosplit = "push1234";
ind = tosplit.indexOf("push");
part1 = tosplit.substring(ind,ind + 4);
part2 = tosplit.substring(ind + 4, tosplit.length());
}
}