Java中的字符串操作问题

Dee*_*pak 3 java string

我昨天在接受采访时询问了以下2个问题

1>给定一个字符串,计算一个新字符串,其中原始字符串中相邻的相同字符之间用"*"分隔.

示例如下所示::
function name ispublic String pairStar(String str)

 pairStar("hello") ? "hel*lo"     
 pairStar("xxyy") ? "x*xy*y"          
 pairStar("aaaa") ? "a*a*a*a"
Run Code Online (Sandbox Code Playgroud)

2>给定一个字符串,计算一个新的字符串,其中所有小写的"x"字符都已移动到字符串的末尾.

示例如下所示::
function name ispublic String endX(String str)

endX("xxre") ? "rexx"     
endX("xxhixx") ? "hixxxx"     
endX("xhixhix") ? "hihixxx"
Run Code Online (Sandbox Code Playgroud)

我不知道如何完成给定的问题,并努力解决这个问题

Bri*_*ach 8

在第一种情况下,您可以遍历字符串,跟踪前一个字符并将其与当前字符进行比较.使用StringBuilder构建新String.

在第二个中,使用两个字符串构建器(一个用于x以外的字符,一个用于x)进行迭代,最后将它们组合在一起.

这只是在30秒内脱离我的头顶,是最简单的方法.第二个想法是,我有可能使用正则表达式,现在我再考虑它10秒:)

  • @Deepak - 为自己解决问题.如果你不能,也许你还没准备好面试Java工作.无论哪种方式,您都可以自己学习更多. (3认同)
  • 我们知道你的意思,但如果你不能用上面的描述弄明白,那么对编程(或Java)进行简单的介绍可能是个更好的主意. (2认同)

Mar*_*ers 8

对于1),这是一个非常简单的正则表达方式:

  String in = "helllo goodbye";
  String out = in.replaceAll("(.)(?=\\1)", "$1*");
  System.out.println(out);
Run Code Online (Sandbox Code Playgroud)

打印:

hel*l*lo go*odbye
Run Code Online (Sandbox Code Playgroud)

说明:

(.)     //match any one character into group 1
(?=\\1) //positive lookahead for that same character by backreferencing group 1

$1*     //replace that one character with the character followed by *
Run Code Online (Sandbox Code Playgroud)

我可能会在2)稍后解决,但我不喜欢将多个问题包含在一起.

编辑

好吧,因为我正处于一个正则表达式的心情,这里是2):

  String in = "xhixhix";
  String out = in;
  while (!out.matches("[^x]*x*")) {
     out = out.replaceAll("x(.*)", "$1x");
  }
  System.out.println(out);
Run Code Online (Sandbox Code Playgroud)

这将替换x(something)(something)x直到所有xs都在字符串的末尾.我敢肯定,有一种更好的方法可以使用/而不是正则表达式.