Java實(shí)現(xiàn)簡易的文本編輯器

需求分析:

  1. 獲得文本名稱
  2. 實(shí)現(xiàn)尾部追加功能
  3. 實(shí)現(xiàn)覆蓋式添加數(shù)據(jù)
  4. 刪除數(shù)據(jù)
  5. 獲取光標(biāo)位置
  6. 在特定光標(biāo)位置處添加數(shù)據(jù)
  7. 查找特定字符串在主串中第一次出現(xiàn)的位置
  8. 統(tǒng)計(jì)文本文件內(nèi)出現(xiàn)的數(shù)字,漢字陪白,英文字母拗引,特殊字符的個(gè)數(shù)串塑,及總的字符個(gè)數(shù)

開發(fā)環(huán)境:
windows7 + Eclipse luna + WindowsBuilder插件

代碼實(shí)現(xiàn):

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

public class Test extends JFrame {

    private JPanel contentPane;
    private static File file = null;
    static int CursorPosition=-1;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test frame = new Test();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Test() {
        file = new File("F://test.txt");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 720, 480);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JTextArea taShow = new JTextArea();
        taShow.setLineWrap(true);
        taShow.setBounds(21, 41, 400, 359);
        

        JLabel label = new JLabel("\u6587\u672C\u9884\u89C8\u533A\uFF1A");
        label.setBounds(21, 16, 89, 15);
        contentPane.add(label);

        JTextArea taEdit = new JTextArea();
        taEdit.setLineWrap(true);
        taEdit.setBounds(449, 41, 233, 131);
        contentPane.add(taEdit);
        
        
        taShow.addCaretListener(new CaretListener() {

            @Override
            public void caretUpdate(CaretEvent e) {
                // TODO Auto-generated method stub
                StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    fileContent = sb.toString();
                    taShow.setText("您打開的文件的內(nèi)容是:" + fileContent);
                    CursorPosition = e.getDot();
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

            }

        });
        contentPane.add(taShow);

        JButton btnGetName = new JButton("\u6587\u6863\u540D\u79F0");
        btnGetName.setBounds(449, 211, 93, 23);
        btnGetName.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    fileContent = sb.toString();
                    fileTitle = file.getName().toString();
                    taEdit.setText("您打開的文件的名稱是:" + fileTitle);
                    taShow.setText("您打開的文件的內(nèi)容是:" + fileContent);
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        contentPane.add(btnGetName);

        JButton btnAppend = new JButton("\u8FFD\u52A0");
        btnAppend.setBounds(449, 261, 93, 23);
        btnAppend.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String temp = taEdit.getText().toString();
                method1("F://test.txt", temp);
                StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    fileContent = sb.toString();
                    fileTitle = file.getName().toString();
                    taEdit.setText("您打開的文件的名稱是:" + fileTitle);
                    taShow.setText("您打開的文件的內(nèi)容是:" + fileContent);
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        contentPane.add(btnAppend);

        JButton btnOverride = new JButton("\u8986\u76D6");
        btnOverride.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                BufferedWriter out = null;
                try {
                    out = new BufferedWriter(new OutputStreamWriter(
                            new FileOutputStream(file)));
                    out.write(taEdit.getText().toString());
                } catch (Exception ex) {
                    ex.printStackTrace();
                } finally {
                    try {
                        if (out != null) {
                            out.close();
                        }
                    } catch (IOException le) {
                        le.printStackTrace();
                    }
                }

                StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    fileContent = sb.toString();
                    fileTitle = file.getName().toString();
                    taEdit.setText("您打開的文件的名稱是:" + fileTitle);
                    taShow.setText("您打開的文件的內(nèi)容是:" + fileContent);
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }

        });
        btnOverride.setBounds(449, 308, 93, 23);

        contentPane.add(btnOverride);

        JButton btnSearch = new JButton("\u67E5\u627E");
        btnSearch.setBounds(449, 357, 93, 23);
        btnSearch.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    fileContent = sb.toString();
                    taShow.setText("您打開的文件的內(nèi)容是:" + fileContent);
                    String p = taEdit.getText().toString().trim();
                    taShow.setText(fileContent+"\n\n"+"您查找的字符串第一次出現(xiàn)的位置是:"+fileContent.indexOf(p));
                    
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }

        });
        
        
        
        contentPane.add(btnSearch);

        JButton btnPosition = new JButton("\u5149\u6807\u4F4D\u7F6E");
        btnPosition.setBounds(589, 211, 93, 23);
        btnPosition.enable(false);
        contentPane.add(btnPosition);

        JButton btnInsert = new JButton("\u5B9A\u70B9\u63D2\u5165");
        btnInsert.setBounds(589, 261, 93, 23);
        btnInsert.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    String temp=taEdit.getText().toString();
                    sb.insert(CursorPosition, temp);
                    method1("F://test.txt", sb.toString());
                    taShow.setText(sb.toString());
                    taEdit.setText("定點(diǎn)的數(shù)據(jù)插入成功執(zhí)行!");
                }catch(Exception ev){
                    ev.printStackTrace();
                }
            }
            
        });
        contentPane.add(btnInsert);

        JButton btnDelete = new JButton("\u5220\u9664");
        btnDelete.setBounds(589, 308, 93, 23);
        btnDelete.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                BufferedWriter out = null;
                try {
                    out = new BufferedWriter(new OutputStreamWriter(
                            new FileOutputStream(file)));
                    out.write("");
                    taShow.setText("刪除操作已完成蛔垢,請(qǐng)到相應(yīng)路徑下查看!");
                } catch (Exception ex) {
                    ex.printStackTrace();
                } finally {
                    try {
                        if (out != null) {
                            out.close();
                        }
                    } catch (IOException le) {
                        le.printStackTrace();
                    }
                }
            }
        });
        contentPane.add(btnDelete);

        JButton btnTotal = new JButton("\u7EDF\u8BA1");
        btnTotal.setBounds(589, 357, 93, 23);
        btnTotal.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    fileContent = sb.toString();
                    new Total().find(fileContent);
                    String flag = "數(shù)據(jù)信息統(tǒng)計(jì)結(jié)果如下:" + "\n" + "漢字?jǐn)?shù)目:";
                    flag += new Total().chineseCount;
                    flag += "\n英文字母個(gè)數(shù):";
                    flag += new Total().englishCount;
                    flag += "\n特殊字符個(gè)數(shù):";
                    flag += new Total().numberCount;
                    flag += "\n總的字符個(gè)數(shù)為:"
                            + (new Total().chineseCount
                                    + new Total().englishCount + new Total().numberCount);
                    taShow.setText(flag);
                    new Total().chineseCount = 0;
                    new Total().englishCount = 0;
                    new Total().numberCount = 0;
                } catch (Exception ec) {
                    ec.printStackTrace();
                }
            }

        });
        contentPane.add(btnTotal);

        JLabel label_1 = new JLabel("\u6587\u672C\u7F16\u8F91\u533A\uFF1A");
        label_1.setBounds(449, 16, 93, 15);
        contentPane.add(label_1);
    }

    public static void method1(String file, String conent) {
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(file, true)));
            out.write(conent);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

下面解釋一下為什么沒有做好注釋合作說明文檔焙压,因?yàn)槲易鲎⑨屪龅揭话氲臅r(shí)候三娩,出現(xiàn)了一點(diǎn)事故庵芭,導(dǎo)致沒有來得及保存的文件丟失了,所以雀监,請(qǐng)大家謹(jǐn)記双吆,時(shí)刻記得保存編輯的被容,否則后果真的很嚴(yán)重会前。

代碼追補(bǔ)解釋好乐,下面的代碼塊是我程序里面做的不好的,違背了代碼的復(fù)用性原則回官,請(qǐng)予以為戒:

代碼塊1:

//代碼的作用就是實(shí)現(xiàn)對(duì)特定的文件進(jìn)行讀取曹宴,并存入到String中,方便使用
StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    fileContent = sb.toString();
                    taShow.setText("您打開的文件的內(nèi)容是:" + fileContent);
                    CursorPosition = e.getDot();
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

代碼塊2:

//代碼實(shí)現(xiàn)了向特定的文件內(nèi)追加數(shù)據(jù)歉提,若想要覆蓋式追加,把參數(shù)true去掉即可区转,默認(rèn)為覆蓋式添加數(shù)據(jù)
public static void method1(String file, String conent) {
        BufferedWriter out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(file, true)));
            out.write(conent);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

代碼塊3:
在統(tǒng)計(jì)模塊中:

btnTotal.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                StringBuffer sb = new StringBuffer();
                String length = "";

                String fileTitle;
                String fileContent;
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(
                            "F://test.txt"));
                    while ((length = reader.readLine()) != null) {
                        sb.append(length);
                    }
                    fileContent = sb.toString();
                    new Total().find(fileContent);
                    String flag = "數(shù)據(jù)信息統(tǒng)計(jì)結(jié)果如下:" + "\n" + "漢字?jǐn)?shù)目:";
                    flag += new Total().chineseCount;
                    flag += "\n英文字母個(gè)數(shù):";
                    flag += new Total().englishCount;
                    flag += "\n特殊字符個(gè)數(shù):";
                    flag += new Total().numberCount;
                    flag += "\n總的字符個(gè)數(shù)為:"
                            + (new Total().chineseCount
                                    + new Total().englishCount + new Total().numberCount);
                    taShow.setText(flag);
                    new Total().chineseCount = 0;
                    new Total().englishCount = 0;
                    new Total().numberCount = 0;
                } catch (Exception ec) {
                    ec.printStackTrace();
                }
            }

其中使用到的new Total().find()方法苔巨,詳見下面的代碼:

package Editer;

/**
 * 分別統(tǒng)計(jì)出其中字符串中漢字,英文字母废离,數(shù)字侄泽,其他字符數(shù)量
 * @author wWX154783
 * 
 */
public class Total
{
    static String E1,E2,E3;
    String str="a12中國3@b&4語*言3c";
    static int chineseCount = 0;
    static int englishCount = 0;
    static int numberCount = 0;
    
    public void find(String str)
    {
       

        String E1 = "[\u4e00-\u9fa5]";// 中文
        String E2 = "[a-zA-Z]";// 英文
        String E3 = "[0-9]";// 數(shù)字

        

        String temp;
        for (int i = 0; i < str.length(); i++)
        {
            temp = String.valueOf(str.charAt(i));
            if (temp.matches(E1))
            {
                chineseCount++;
            }
            if (temp.matches(E2))
            {
                englishCount++;
            }
            if (temp.matches(E3))
            {
                numberCount++;
            }
        }
        System.out.println("漢字?jǐn)?shù):" + chineseCount);
        System.out.println("英文數(shù):" + englishCount);
        System.out.println("數(shù)字?jǐn)?shù):" + numberCount);
        System.out.println("特殊字符:" + (str.length() - (chineseCount + englishCount + numberCount)));
    }
}

好了,下面是程序運(yùn)行后得到的界面蜻韭,在此我要聲明的是悼尾,程序仍然存在一些bug,表現(xiàn)在獲得光標(biāo)位置時(shí)的java.lang.IllegalStateException: Attempt to mutate in notification異常肖方,主要還是線程相關(guān)闺魏,如果博友能解決,還望不吝賜教


統(tǒng)計(jì)方法運(yùn)行結(jié)果

刪除方法運(yùn)行結(jié)果

查找方法運(yùn)行結(jié)果

文檔名稱運(yùn)行結(jié)果

能力有限俯画,希望和大家一起進(jìn)步析桥,一同提高!

接下來的是我從網(wǎng)上找到的一份用C語言實(shí)現(xiàn)的簡易的文本編輯器的實(shí)現(xiàn)艰垂,個(gè)人認(rèn)為較之泡仗,我的簡直就是太菜了,現(xiàn)在將代碼貼出來猜憎,希望這篇C語言的經(jīng)典能讓更多的人知曉:

#include <stdio.h>
#define MAXLEN 80
#define MAXLINE 200
char buffer[MAXLEN],fname[120];
char *lineptr[MAXLINE];
FILE *fp;
void edit(),replace(),insert(),delete(),quit();
char comch[]="EeRrIiDdQq";/*命令符*/
void(*comfun[])()={edit,replace,insert,delete,quit};/*對(duì)應(yīng)處理函數(shù)*/
int modified=0,/*正文被修改標(biāo)志*/
    last;/*當(dāng)前正文行數(shù)*/
char *chpt;/*輸入命令行字符指針*/

main()
{
    int j;

    last=0;
    while(1)
    {
        printf("\nInput a command:[e,r,i,d,q].\n");
        gets(buffer);/*讀入命令行*/
        for(chpt=buffer;*chpt=='\0'||*chpt=='\t';chpt++);/*掠過空白符*/
        if(*chpt=='\0') continue;/*空行重新輸入*/
        for(j=0;comch[j]!='\0'&&comch[j]!=*chpt;j++);/*查命令符*/
        if(comch[j]=='\0') continue;/*非法命令符*/
        chpt++;/*掠過命令符娩怎,指向參數(shù)*/
        (*comfun[j/2])();/*執(zhí)行對(duì)應(yīng)函數(shù)*/
        fprintf(stdout,"The text is:\n");
        for(j=0;j<last;j++)/*顯示正文*/
            fputs(lineptr[j],stdout);
    }
}
void quit()
{
    int c;
    if(modified)/* 如正文被修改 */
    {
        printf("Save? (y/n)");
        while(!(((c=getchar())>='a'&&c<='z')||(c>='A'&&c<='Z')));
        if(c=='y'||c=='Y')
            save(fname); /* 保存被修改過的正文 */
    }
    for(c=0;c<last;c++)
        free(lineptr[c]);   /* 釋放內(nèi)存 */
    exit(0);
}

void insert()
{
    int k,m,i;
    sscanf(chpt,"%d%d",&k,&m);  /* 讀入?yún)?shù) */
    if(m<0||m>last||last+k>=MAXLINE)/* 檢查參數(shù)合理性 */
    {
        printf("Error!\n");
        return;
    }
    for(i=last;i>m;i--)/* 后繼行向后移 */
        lineptr[i+k-1]=lineptr[i-1];
    for(i=0;i<k;i++)   /* 讀入k行正文,并插入 */
    {
        fgets(buffer,MAXLEN,stdin);
        lineptr[m+i]=(char *)malloc(strlen(buffer)+1);
        strcpy(lineptr[m+i],buffer);
    }
    last+=k;    /* 修正正文行數(shù) */
    modified=1; /* 正文被修改 */
}

void delete()
{
    int i,j,m,n;
    sscanf(chpt,"%d%d",&m,&n);  /* 讀入?yún)?shù) */
    if(m<=0||m>last||n<m)   /* 檢查參數(shù)合理性 */
    {
        printf("Error!\n");
        return;
    }
    if(n>last)
        n=last;     /* 修正參數(shù) */
    for(i=m;i<=n;i++)   /* 刪除正文 */
        free(lineptr[i-1]);
    for(i=m,j=n+1;j<=last;i++,j++)
        lineptr[i-1]=lineptr[j-1];
    last=i-1;   /* 修正正文行數(shù) */
    modified=1; /* 正文被修改 */
}

void replace()
{
    int k,m,n,i,j;
    sscanf(chpt,"%d%d%d",&k,&m,&n); /* 讀入?yún)?shù) */
    if(m<=0||m>last||n<m||last-(n-m+1)+k>=MAXLINE)/* 檢查參數(shù)合理性 */
    {
        printf("Error!\n");
        return;
    }
    /* 先完成刪除 */
    if(n>last)
        n=last;     /* 修正參數(shù) */
    for(i=m;i<=n;i++)   /* 刪除正文 */
        free(lineptr[i-1]);
    for(i=m,j=n+1;j<=last;i++,j++)
        lineptr[i-1]=lineptr[j-1];
    last=i-1;
    /* 以下完成插入 */
    for(i=last;i>=m;i--)
        lineptr[i+k-1]=lineptr[i-1];
    for(i=0;i<k;i++)
    {
        fgets(buffer,MAXLEN,stdin);
        lineptr[m+i-1]=(char *)malloc(strlen(buffer)+1);
        strcpy(lineptr[m+i-1],buffer);
    }
    last+=k;    /* 修正正文行數(shù) */
    modified=1; /* 正文被修改 */
}

save(char *fname)   /* 保存文件 */
{
    int i;
    FILE *fp;
    if((fp=fopen(fname,"w"))==NULL)
    {
        fprintf(stderr,"Can't open %s.\n",fname);
        exit(1);
    }
    for(i=0;i<last;i++)
    {
        fputs(lineptr[i],fp);
        free(lineptr[i]);
    }
    fclose(fp);
}

void edit() /* 編輯命令 */
{
    int i;
    FILE *fp;
    i=sscanf(chpt,"%s",fname);  /* 讀入文件名 */
    if(i!=1)
    {
        printf("Enter file name.\n");
        scanf("%s",fname);
    }
    if((fp=fopen(fname,"r"))==NULL) /* 讀打開 */
    {
        fp=fopen(fname,"w");    /* 如不存在胰柑,則創(chuàng)建文件 */
        fclose(fp);
        fp=fopen(fname,"r");    /* 重新讀打開 */
    }
    i=0;
    while(fgets(buffer,MAXLEN,fp)==buffer)
    {
        lineptr[i]=(char *)malloc(strlen(buffer)+1);
        strcpy(lineptr[i++],buffer);
    }
    fclose(fp);
    last=i;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末截亦,一起剝皮案震驚了整個(gè)濱河市辣辫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌魁巩,老刑警劉巖急灭,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谷遂,居然都是意外死亡葬馋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門肾扰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畴嘶,“玉大人,你說我怎么就攤上這事集晚〈懊酰” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵偷拔,是天一觀的道長蒋院。 經(jīng)常有香客問我,道長莲绰,這世上最難降的妖魔是什么欺旧? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蛤签,結(jié)果婚禮上辞友,老公的妹妹穿的比我還像新娘。我一直安慰自己震肮,他們只是感情好称龙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著戳晌,像睡著了一般鲫尊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躬厌,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天马昨,我揣著相機(jī)與錄音,去河邊找鬼扛施。 笑死鸿捧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疙渣。 我是一名探鬼主播匙奴,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼妄荔!你這毒婦竟也來了泼菌?” 一聲冷哼從身側(cè)響起谍肤,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哗伯,沒想到半個(gè)月后荒揣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焊刹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年系任,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虐块。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俩滥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贺奠,到底是詐尸還是另有隱情霜旧,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布儡率,位于F島的核電站挂据,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喉悴。R本人自食惡果不足惜棱貌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望箕肃。 院中可真熱鬧,春花似錦今魔、人聲如沸勺像。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吟宦。三九已至,卻和暖如春涩维,著一層夾襖步出監(jiān)牢的瞬間殃姓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工瓦阐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜗侈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓睡蟋,卻偏偏與公主長得像踏幻,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戳杀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理该面,服務(wù)發(fā)現(xiàn)夭苗,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法隔缀,類相關(guān)的語法题造,內(nèi)部類的語法,繼承相關(guān)的語法猾瘸,異常的語法界赔,線程的語...
    子非魚_t_閱讀 31,587評(píng)論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,522評(píng)論 25 707
  • 人類的情緒是極其豐富的,正如中醫(yī)所講的人有7情须妻,分別為:喜仔蝌、怒、憂荒吏、思敛惊、悲、恐绰更、驚瞧挤。每個(gè)人生活在這個(gè)世界上,都難免...
    好睞鼠閱讀 254評(píng)論 0 0
  • Case類和常規(guī)類有幾個(gè)關(guān)鍵差異儡湾。Case類適用于模型化不可變數(shù)據(jù)特恬。之后會(huì)在模式匹配中展示如何使用Case類。 定...
    steanxy閱讀 1,845評(píng)論 0 0