设计算法将下面的配置文件中的注释部分去掉,留下有用的内容//这是xxx系统的配置文件
////////////////////////////////
/*
该配置文件控制着软件的运行过程
..... ....
*/maxUsers=50 //最大用户数
/*超时设置*/ IdleTimeOut=300 //单位:秒
database=/*数据库别名*/ mySql5.0
/*数据库登录*/user=root
password=mysql /*数据库密码*/
////////////////////////////////
//xxx系统配置文件结束
////////////////////////////////
/*
该配置文件控制着软件的运行过程
..... ....
*/maxUsers=50 //最大用户数
/*超时设置*/ IdleTimeOut=300 //单位:秒
database=/*数据库别名*/ mySql5.0
/*数据库登录*/user=root
password=mysql /*数据库密码*/
////////////////////////////////
//xxx系统配置文件结束
maxUsers=50
IdleTimeOut=300
database=mySql5.0
user=root
password=mysql
////////////////////////////////
public class ClearComment { public static void clearComment()
{
try
{
BufferedReader br = new BufferedReader(new FileReader("F:/temp/config.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("F:/temp/new-config.txt"));
StringBuilder longStr = new StringBuilder("");
String temp = null;
while((temp = br.readLine()) != null)
longStr.append(temp.trim() + "\n"); // 将文件的字符串都连接起来,不过得以'\n'分隔开
// 然后去除这个长字符串的注释
String result = clearComment(longStr);
System.out.println(result);
pw.println(result);
pw.flush();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static String clearComment(StringBuilder longStr)
{
StringBuilder result = new StringBuilder("");
boolean isBlockCommentStart = false; // 之前是否有"/*",如果有,并且还没有结束,则true
boolean isRowCommentStart = false; // 之前是否有"//",如果有,并且还没有结束,则true
int index = 0;
while(index < longStr.length())
{
String subStr = "";
if(index != longStr.length() - 1)
subStr = longStr.substring(index, index + 2); if(!isBlockCommentStart)
{
if(!isRowCommentStart)
{
if("//".equals(subStr))
{
isRowCommentStart = true;
index += 2;
}
else if("/*".equals(subStr))
{
isBlockCommentStart = true;
index += 2;
}
else
{
char c = longStr.charAt(index);
if(c != ' ' && c != ' ')
result.append(longStr.charAt(index));
index ++;
}
}
else
{
if('\n' == longStr.charAt(index))
{
isRowCommentStart = false;
result.append('\n');
}
index ++;
}
}
else
{
if("*/".equals(subStr))
{
isBlockCommentStart = false;
index += 2;
}
else
index ++;
}
}
return result.toString();
}
public static void main(String[] args) {
clearComment();
}
}这是我帮你实现的一个算法,刚看到你的描述时,觉得很简单,但是真正去处理的时候,才发现真的不如想象的那么简单。
你可以先运行下试试,如果有不合意的地方,可以稍作修改,如果还有问题,你给我的博客留言。