【发布时间】:2021-04-22 14:50:46
【问题描述】:
我说的问题是this
问题说明:
返回给定字符串的一个版本,对于字符串中的每个星号 (),星号和紧邻其左右的字符都消失了。所以“abcd”产生“ad”,“ab**cd”也产生“ad”。
starOut("ab*cd") → "广告"
starOut("ab**cd") → "广告"
starOut("sm*eilly") → "傻"
我得到的解决方案有点混乱,我使用了大约 6 个 if 语句和一个特定情况的处理,寻找具有较少 if 的更清洁的解决方案。
请不要使用超过 1 个循环和集合或正则表达式。
以下是我的解决方案:
public String starOut(String str) {
String result="";
boolean currentFlag=false;
if(str.length()==0)
return result;
for(int i=0;i+1<str.length();i++)
{
if(str.charAt(i)=='*')
{
i+=1;
currentFlag=true;
continue;
}
if(str.charAt(i+1)=='*')
{
i+=2;
continue;
}
if((i>0)&&str.charAt(i-1)=='*')
{
continue;
}
result+=str.substring(i,i+1);
currentFlag=false;
}
if(!(currentFlag)&&(str.length()==3)&&(str.charAt(1)=='*'))
return "";
if((str.charAt(str.length()-1)!='*')&!(currentFlag))
return result+=str.charAt(str.length()-1);
else
return result;
}
【问题讨论】:
-
你应该看看regex
-
谢谢 我知道正则表达式,但不希望使用正则表达式来解决它。
-
另外,如果你有工作代码,我建议你把它交给CodeReview SE。你可以自己标记这个,让模组知道你是否想要这个迁移。
-
无意冒犯 Anirudh,但从您的代码来看,正则表达式似乎有点过头了。不要试图在你的循环中向前看;这就是循环的用途。从第一个字符开始,检查它,处理特殊情况,进行更改,继续。
-
请发布解决方案,而不是抱怨正则表达式。问题中没有提到涉及正则表达式。谢谢!