重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
我首先说下思路吧,你想更改文件中的字符串,首先你要使用java中的io把文件里面的内容全部读到一个字符串当中,然后对这个字符串进行查找替换的操作,最后在把你更改之后的这个字符串写进文件当中,当然是覆盖掉这个文件。
成都创新互联公司自成立以来,一直致力于为企业提供从网站策划、网站设计、成都做网站、网站制作、成都外贸网站建设、电子商务、网站推广、网站优化到为企业提供个性化软件开发等基于互联网的全面整合营销服务。公司拥有丰富的网站建设和互联网应用系统开发管理经验、成熟的应用系统解决方案、优秀的网站开发工程师团队及专业的网站设计师团队。
这里我就用到FileOutputStream FileInputStream BufferedReader PrintWriter
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
try {
File file = new File("c:\\abc.txt");
// 建立一个file对象,参数就是你想访问文件的路径,这里我就不验证文件是否存在了
// 查下api即可
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
List list =new ArrayList();
//定义一个集合存放每一行的字符串
while(true){
String str=br.readLine();
//读取文件当中的一行
if(str==null) break;
//如果读取的是空,也就是文件读取结束 跳出循环
int index=str.indexOf("zhidao");
//看此行的是否包含zhidao
if(index!=-1){
str.replace("zhidao", "answer");
//如果包含就把zhidao 换成answer
}
list.add(str);
//把修改之后的str放到集合当中
}
br.close();
PrintWriter pw=new PrintWriter(file);
//建立一个输出流,把东西写入文件
for(int i=0;ilist.size();i++){
String str =(String)list.get(i);
//从集合当中取出字符串
pw.println(str);
//把该字符串写入文件当中
}
pw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在C盘新建文件1.txt,输入任意字符,如下图:
编写java代码。如下:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.TreeMap;
public class Test {
// 统计数字或者字符出现的次数
public static TreeMapCharacter, Integer Pross(String str) {
char[] charArray = str.toCharArray();
TreeMapCharacter, Integer tm = new TreeMapCharacter, Integer();
for (int x = 0; x charArray.length; x++) {
if (!tm.containsKey(charArray[x])) {
tm.put(charArray[x], 1);
} else {
int count = tm.get(charArray[x]) + 1;
tm.put(charArray[x], count);
}
}
return tm;
}
public static void main(String[] args) {
BufferedReader br = null;
int line = 0;
String str = "";
StringBuffer sb = new StringBuffer();
try {
br = new BufferedReader(new FileReader("c:\\1.txt"));
while ((str = br.readLine()) != null) {
sb.append(str);
++line;
}
System.out.println("\n文件行数: " + line);
System.out.println("\n文件内容: " + sb.toString());
TreeMapCharacter, Integer tm = Pross(sb.toString());
System.out.println("\n字符统计结果为:" + tm);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}运行结果如下图:
在javascript中eval()可以实现字符串转代码,java中需要使用动态编译。
把获得的字符串写入一个临时文件中,然后编译它,在调用其中的函数。
我们把要转换的字符串构造一个完整的类:如果方法是有返回值的.则:
public object eval(string str){
//生成java文件
string s = "class temp{";
s += "object rt(){"
s += "myclass mc = new myclass();"
s += " return mc."+str+"();";
s += "}"
s +="}";
file f = new file("temp.java");
printwriter pw = new printwriter(new filewriter(f));
pw.println(s);
pw.close();
//动态编译
com.sun.tools.javac.main javac = new com.sun.tools.javac.main();
string[] cpargs = new string[] {"-d", "所在目录","temp.java"};
int status = javac.compile(cpargs);
if(status!=0){
system.out.println("没有成功编译源文件!");
return null;
}
//调用temp的rt方法返回结果:
myclassloader mc = new myclassloader();
class clasz = mc.loadclass("test.class",true);
method rt = clasz.getmethod("rt", new class[]{ string[].class });
return rt.invoke(null, new object[] { new string[0] });
//如果方法没有返回就直接调用
}
我们可以先写好多个重载的eval,有返回值和没有返回值的.以及可以传递参数的.
这样我们就可以用字符串转换为java的语句来执行.
123456789101112131415161718192021222324
public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str=br.readLine(); int countNum = 0;//统计数字的个数 int countChar = 0;//统计英文字母的个数 int countSpace = 0;//统计空格的个数 int countOthers = 0;//统计其它字符的个数 for (int i = 0; i str.length(); i++) { char c = str.charAt(i); if (c = '0' (int) c = '9') { countNum++; } else if ((c = 'a' c = 'z')||(c = 'A' c = 'Z')) { countChar++; } else if (c == ' ') { countSpace++; } else{ countOthers++; } } System.out.println("数字个数:"+countNum); System.out.println("英文字母个数:"+countChar); System.out.println("空格个数:"+countSpace); System.out.println("其他字符个数:"+countOthers); }
一、问题分析:
输入一行字母,那么会以换行结束。所以可以存入数组,也可以逐个输入,遇到换行结束。
要统计各个类的个数,就要逐个判断是哪个分类的。
由于在ASCII码中,数字,大写字母,小写字母分别连续,所以可以根据边界值判断类型。
二、算法设计:
1、读入字符,直到遇到换行结束。
2、对于每个字符,判断是字母还是数字,或者空格,或者是其它字符。
3、对于每个字符判断后,对应类别计数器自加。
4、最终输出结果。