-1

所以,请多多包涵,因为我在这里有一个很长的问题,我在 java 中有一些代码使用数组列表来实现堆栈。我需要能够输入命令“push”来将东西添加到堆栈中。但是我的问题是它必须采用 pushSTUFF 格式。

“STUFF”是任何东西,大写、小写、字符串、int 等。我一直试图实现这一点的方法是使用字符串拆分方法,其中 PUSH 是分隔符。然后命令被传递到一个开关盒。

我很快意识到拆分被丢弃了,至少据我所知,并且开关盒正在将 pushSTUFF 而不是 push 作为 case 输入。

在考虑这个问题时,我想出了几种方法可以做到这一点。我只是不知道它们是否可能或如何去做。

所以,

  1. 有没有办法拆分像 pushSTUFF 这样的字符串并保留两个部分(push 和 STUFF)

  2. 有没有办法从字符串中拆分长度或内容未知的东西(因为我不知道用户将输入什么东西是未知的)

  3. 有没有办法告诉开关盒寻找 pushSTUFF 而不是仅仅推动(再次因为 STUFF 是未知的)。

这些甚至有可能做到吗?如果是这样,你会推荐什么?

我确信有更好的方法,但由于我仍在学习 java,这些似乎是目前最好的方法。我也没有发布任何代码,因为我觉得这个问题没有必要。如果你需要的话,我会发布一些。只要问,我会很乐意效劳。

(tl;dr) 是否可以执行上述 1、2 或 3 中的任何一项,如果可以,怎么做?提前致谢。

4

4 回答 4

1

除了拆分字符串之外,您还可以将正则表达式与组一起使用并迭代它的匹配部分(如您所见,拆分的字符被丢弃)。

对于#1,您可以执行类似(伪代码)的操作:

   regex = (push)(.*)
   stuff = groups[1]

这也应该涵盖#2,因为它将匹配推送后的所有字符。

我不完全确定您在#3中要问什么。

如果您不熟悉 java 正则表达式,这里有一个正则表达式教程。

您还可以查看StringTokenizer,它具有保留分隔符的选项。

于 2013-03-06T23:28:30.303 回答
1

如果格式总是 push* SOMETHING * 你为什么不使用 String.substring()?

你可以做:

String something = "pushSTUFF".substring(4);

这样,您将始终得到push背后的任何内容。

如果没有看到实际代码,我真的不明白你想要实现什么,但你的问题似乎很简单,可以通过这种方式解决。

于 2013-03-06T23:39:24.570 回答
0

您可以搜索任何大写字母并使用 String.substring(...)

查找字符串中的第一个字符是否为大写,Java

于 2013-03-06T23:28:43.687 回答
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());
 }
}
于 2013-03-06T23:34:39.573 回答