首页 > 试题广场 > 有两个文件context.txt和words.conf,请尝
[问答题]
有两个文件context.txt和words.conf,请尝试将他们合并成为一段文字,并打印出来。
这两个文件内容如下:
context.txt
“并不是每个人都需要$(qunar)自己的粮食,$(flight.1)每个人都需要做自己穿的$(flight.2),我们说着别人发明的$(hotel),使用别人发明的数学......我们一直在$(tuan)别人的成果。使用人类的已有经验和知识$(travel.1)来进行,是一件$(travel.2)的事情”

word.conf

flight=也不是:衣服

qunar=种植

hotel=语言

tuan=使用

travel=发明创造:很了不起

 public class MergeText {
	public static void main(String[] args) {
		String a="并不是每个人都需要$(qunar)自己的粮食,$(flight.1)每个人都需要做自己穿的$(flight.2),"
		+"我们说着别人发明的$(hotel),使用别人发明的数学......我们一直在$(tuan)别人的成果。"
		+"使用人类的已有经验和知识来进行$(travel.1),是一件$(travel.2)的事情。";
		System.out.println(f(a));
	}
	public static String f(String s){
		StringBuffer sb=new StringBuffer();
		StringBuffer sb2=new StringBuffer();
		int j=0;
		Map map=new HashMap();
		map.put("flight.1", "也不是");
		map.put("flight.2", "衣服");
		map.put("qunar", "种植");
		map.put("hotel", "语言");
		map.put("tuan", "使用");
		map.put("travel.1", "发明创造");
		map.put("travel.2", "很了不起");
		for(int i=0;i<s.length();i++){
			if(s.charAt(i)!='$'){
				sb.append(s.charAt(i));
				
			}else{
				
				for(j=i;;j++){
					sb2.append(s.charAt(j));
					if(s.charAt(j)==')'){	
						break;
					}
				}
				String a=new String(sb2);
				String a2=a.substring(2,a.length()-1);
				sb.append((map.get(a2)).toString());
				sb2.delete(0, sb2.length());
				i=j;
			}
		}
		return new String(sb);
	}
}

发表于 2015-09-08 16:20:41 回复(0)
package qunar;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;


public class Merge2File {
	public static void main(String args[]){
		File context=new File("C:/Users/mao/nowCode/context.txt");
		File word=new File("C:/Users/mao/nowCode/word.conf");
		HashMap<String,String> wordsMap=new HashMap<String, String>();
		try {
			//word.conf以GBK方式编码
			BufferedReader wordReader=new BufferedReader((new InputStreamReader(new FileInputStream(word), "GBK")));  
			String temp=new String(wordReader.readLine().getBytes(),"UTF-8");
			
	    /***word.conf文件以UTF-8方式编码
			BufferedReader wordReader=new BufferedReader(new FileReader(word));
			String temp=wordReader.readLine();
			wordReader.read();
			//UTF-8编码格式的文件有一个文件头EF BB BF(65279),需要去掉
       ********/
 
			while(temp!=null){
				String key=temp.split("=")[0];
				String[] values=temp.split("=")[1].split(":");
				if(values.length==1){
					wordsMap.put(key, values[0]);
					temp=wordReader.readLine();
				}
				else{
					for(int i=0;i<values.length;i++){
						wordsMap.put(key+"."+(i+1), values[i]);
					}
					
					temp=wordReader.readLine();
				}
				
			}
			BufferedReader reader=new BufferedReader(new FileReader(context));
			char[] buf=new char[(int) context.length()];
			reader.read(buf);
			StringBuffer contextString=new StringBuffer(new String(buf));
			int start=contextString.indexOf("$(", 0);
			while(start>0){
				int end=contextString.indexOf(")", start);
				String target=new String(contextString.substring(start+2, end));
				String value= wordsMap.get(target);
				contextString=contextString.replace(start, end+1, value);
				start=contextString.indexOf("$(", end);
			}
			System.out.println(contextString);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}


发表于 2015-09-01 16:16:17 回复(0)
/*
分析:
合并成一个文件,可以使用合并流,sequenceInputStream(InputStream1,InputStream2);
由于操作的是字符型数据,可以使用转换流InputStreamReader,
为了按行打印:可以使用BufferedReader装饰流的readLine();
获取控制台打印流,printStream  p=system.out;
循环打印每一行;
关闭合并流
文件存放在下面路径下
e:/pritice/
 */
public class Test1 {

    public static void main(String[] args){   
        mergeContextAndPrintConsole("e:\\pritice\\context.txt","e:\\pritice\\word.conf");
    }
    /**
     *
     * @param file1AbsolutePath 文件1的绝对路径
     * @param file2AbsolutePath 文件2的绝对路径
     *
     */
    public static void mergeContextAndPrintConsole(String file1AbsolutePath,String file2AbsolutePath)
    {
        File context = new File(file1AbsolutePath);    //建立两个文件对象
        File word = new File(file2AbsolutePath);   
        FileInputStream fis_context =null;//建立两个文件的字节流
        FileInputStream fis_word =null;
        SequenceInputStream sis = null;//建立合并流
        BufferedReader br = null;
        PrintStream ps = System.out;       
            try {
                fis_context = new FileInputStream(context);
                fis_word = new FileInputStream(word);
            } catch (FileNotFoundException e) {
               
                System.out.println("文件找不到!!");
            }
        if(fis_context!=null&&fis_word!=null)
             sis= new SequenceInputStream(fis_context,fis_word);
        if(sis!=null)
            br= new BufferedReader(new InputStreamReader(sis));
        String line = null;
        if(br!=null)
            try {
                while((line=br.readLine())!=null)
                {
                    ps.println(line);
                }
            } catch (IOException e1) {
                System.out.println("读取行发生IO异常");
            }
        if(sis!=null)
            try {
                sis.close();
            } catch (IOException e) {
               
                System.out.println("合并流关闭失败!");
            }
        if(br!=null)
            try {
                br.close();
            } catch (IOException e) {
               
                System.out.println("BufferedReader流关闭失败!");
            }
    }

}

发表于 2015-09-01 02:51:55 回复(0)

package campus.fileDeal;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class CombineFile {
public static void main(String[] args) throws Exception {
File f1 = new File("context.txt");
File f2 = new File("words.conf");
FileReader fReader = new FileReader(f1);
BufferedReader bReader = new BufferedReader(fReader);
StringBuilder sbBuilder = new StringBuilder();
String temp = bReader.readLine();
while (temp != null) {
sbBuilder.append(temp);
temp=bReader.readLine();
}
bReader.close();
BufferedReader bReader2=new BufferedReader(new FileReader(f2));
String resuleString=sbBuilder.toString();
String words;
while((words=bReader2.readLine()) != null)
{
String key;
if(words.indexOf(":")!=-1)
{
key=words.substring(0,words.indexOf("="));
String[] array=words.substring(words.indexOf("=")+1, words.length()).split(":");
for(int i=0;i<array.length;i++)
{
resuleString=resuleString.replace("$("+key+"."+(i+1)+")", array[i]);
}
}
else {
key=words.substring(0,words.indexOf("="));
resuleString=resuleString.replace("$("+key+")",words.substring(words.indexOf("=")+1, words.length()));
}
}
bReader2.close();
System.out.println(resuleString);
}
}
//结果:


发表于 2015-08-31 18:50:35 回复(0)