我说的问题是这个
问题陈述:
返回给定字符串的一个版本,其中对于字符串中的每个星号(),其左右两侧的星号和字符都将消失。所以“abcd”产生“ad”,而“ab**cd”也产生“ad”。
StarOut("ab*cd")→"ad"
StarOut("ab**cd")→"ad"
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;
}
我认为使用正则表达式和模式匹配解决这个问题会很简单
public String starOut(String str) {
String pattern = "([a-zA-Z0-9]{0,1})\\*+([a-zA-Z0-9]{0,1})";
str = str.replaceAll(pattern, "");
return str;
}
这是我写的解决方案。它使用1个循环。
public String starOut(String str)
{
String ret = "";
for (int i = 0; i < str.length(); i++)
{
if (!( '*' == str.charAt(i)
|| i + 1 < str.length() && '*' == str.charAt(i+1)
|| i > 0 && '*' == str.charAt(i-1) ))
{
ret = ret + str.charAt(i);
}
}
return ret;
}
伪代码:
单步遍历字符串中的所有字符。如果你降落在星号上,不要记录。向左看,如果看到星号,不要记录。向右看,如果你看到星号,不要记录。如果上述情况均未发生,则记录下来。
Java代码:
public static String starOut(String s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '*') continue;
if (i > 0 && s.charAt(i - 1) == '*') continue;
if (i < s.length() - 1 && s.charAt(i + 1) == '*') continue;
sb.append(s.charAt(i));
}
return sb.toString();
}
注意:我看到许多答案会弹出,它们将String
对象连接到循环中,而不是使用StringBuilder
。不要那样做。效率很低
当我们基本完成程序的设计,我们就可以编写代码了,它是对我们的解决方案的实施。 版本一 例10.1 备份脚本——版本一 #!/usr/bin/python # Filename: backup_ver1.py importos importtime # 1. The files and directories to be backed up are specified in a list. sour
问题内容: 尽管这可能是Java Web Services的副本,但我想知道从哪里开始和继续。过去,我花了很多时间来找到从哪里开始,但我却没有。阅读有关Web服务的页面时,有很多术语和混乱(至少对我来说是如此!)。有很多术语- 例如Web Service和其他我不知道的术语。该用户组可以合并并提供易于理解和遵循的Java Web Services的高级概述吗?我感谢您的好意,并感谢您的帮助。 问题
本文向大家介绍基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法,包括了基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 同事遇到编码问题时想做一个解决全站的字符编码过滤器,过滤器类和配置如下: 过滤器类: 过滤器配置: 但是在前端form的提交方式是get的情况下,得到的仍然是乱码。 刚开始一直纠结于过滤器是不是写错了
Java怎么读取很大数据量的 Excel (1000万条数据),希望一行一行读取数据。 目前使用POI进行了文件读取,但是耗费时间很长,大约用了1分钟。大家有没有更快的解决方案
本文向大家介绍Java String.replace()方法"无效"的原因及解决方式,包括了Java String.replace()方法"无效"的原因及解决方式的使用技巧和注意事项,需要的朋友参考一下 首先我们来看个例子 运行结果是什么呢?我们先看看这个方法的api 返回一个新的字符串,用newChar替换此字符串中出现的所有oldChar 所以这里的结果为:输出结果是abcd 而不是fbcd,
本文向大家介绍IDEA编写JavaWeb出现乱码问题解决方案,包括了IDEA编写JavaWeb出现乱码问题解决方案的使用技巧和注意事项,需要的朋友参考一下 使用IDEA写JavaWeb项目时,总会出现编码出错等问题,比如下面这样,页面显示出来一大堆乱码,下面跟着我来操作一下,可以成功解决! 首先在IDEA安装目录下有一个:bin的文件夹,打开后找到如下两个东西:分别打开后再后面添加:-Dfile.