2016-09-30 10 views
-2

私はファイル(prueba.txt)を持っていますが、私は0x14の0x14、0xE9(é)のASCII文字0xE1(é)を0x15の0xF3(ó)に置き換えたいと思います。 String.replace()で可能ですがチャーです。Javaの代わりにascii char

import java.io.File; 
import java.util.Scanner; 

public class Reemplazar { 

    public static void main(String[] args) throws Exception { 

     Scanner archivo = new Scanner(new File("prueba.txt")); 

      while(archivo.hasNextLine()) { 
       String frase = archivo.nextLine(); 

       for (int i = 0; i < frase.length(); i++) { 
        char current = frase.charAt(i); 

        if (current == 0xe1) { 
         System.out.println("contiene la á: '"+frase+"'"); 
        } 

        if (current == 0xe9) { 
         System.out.println("contiene es la é: '"+frase+"'"); 
        } 

       } 
      } 
    } 
} 

私は

挨拶をこのコードはかなり改善されていると思いますが...。

+0

ASCIIのあなたの言及が混乱するだけでなく、あなたのUTF-16コード単位の形式ですか?テキストファイルの文字セットとエンコーディングは何ですが「\ u00e1」または「á」として記述しないでください。Java文字列とcharはすべてUTF-16です。 –

+0

は少し混乱します。申し訳ありませんが、エンコードはANSIです。テキストには、 、é、ñ...これらの特殊文字を他の文字で変更したい►、☼、◄ ご挨拶 –

答えて

1

まずテキストファイルを読み、文字を置き換えます。

テキストファイルを読むと、いくつかの特定の文字セットとエンコーディングを持っています。それが何であるか正確にはシステムのデフォルトのANSI文字セットとエンコーディングであることがわかっている必要があります。 ANSIは特定のエンコーディングではありません。

あなたがANSIと言ったので、おそらくシステムのデフォルトを意味していました。使用したコンストラクタScannerは、Javaのデフォルト用です。 Javaのデフォルトがシステムのデフォルトと正しく一致していると考えることができます。

交換文字

JavaのStringcharCharacterデータ型で、分析のJavaソースファイル内のすべての「文字」は、UTF-16コード単位つまたはそのうちの2つのUnicodeコードポイントをエンコードしています。エスケープされていないリテラル文字列や文字は、ソースファイルのエンコーディングに使用されます。 (もちろん、そのでなければなりません)あなたがそれを見て、それを保存し、同じエンコーディングでコンパイルするならば、文字はあなたが思うものになります。だから、

、あなたは文字列内のテキストを持っていたら、あなたは置き換える、置き換え、置き換え、このようなことができます。

frase 
    .replace('á', '►') 
    .replace('é', '☼') 
    .replace('ñ', '◄') 

または

frase 
    .replace('\u00E1', '\u25B6') 
    … 

ところで-0x14の、0x15の、0x16はエンコードされています文字セットOEM437のエンコーディングで►、☼、◄を選択します。

文字列の要素を繰り返し処理する場合は、charAtを使用するなど、各UTF-16コード単位で行うことができます。すべてのテキストがUTF-16で1つのコード単位でエンコードされた文字だった場合は、これが最適です。ファイルのエンコーディングがヨーロッパ言語のANSI文字セットの1つであるとすると、そのような場合があります。または、JavaドキュメントのCharSequenceにあるように、コードポイントを認識する手法を使用して反復することもできます。

+0

あなたの説明をありがとう、frase.Replace()は値を変更しません、これはコードです。 \t while(archivo.hasNextLine()){ \t文字列frase = archivo.nextLine(); \t char [] letras = frase.toCharArray(); \t frase.replace((チャー)0xE1の、(CHAR)0x14に:{ \tスイッチ(歌詞[I]){ \t場合0xE1の \tがため(; I

+0

文字列は不変です。 Replaceは新しいStringを返します。私の例は式なので、結果をあなたに割り当てます。 –

+0

理解して、それはその論理を持っています。今、それは動作します、ありがとう。 ご挨拶。 –

0

それはあなたがこのような何かを行うことができますので、それは、charであることにも優れている:

yourStringToReplace.replace(0xe1);

charは数の文字insteedようthreatedさinteger(単に話す)

です
+0

返信ありがとうございますが、何もしません。 liena.replace((char)0xE1、(char)0x14); と動作しません。 ご挨拶。 –

0

これは文字を置き換え、新しいファイル "nueva_prueba"を作成します。変更されたテキスト

public class Reemplazar { 

    public static void main(String[] args) throws IOException 
    { 
     BufferedWriter out; 

     File f = new File("nueva_prueba.txt"); 
     f.createNewFile(); 

     out = new BufferedWriter(new FileWriter(f)); 


     Scanner archivo = new Scanner(new File("prueba.txt")); 

     while(archivo.hasNextLine()) { 
      String frase = archivo.nextLine(); 

      for (int i = 0; i < frase.length(); i++) { 
       char current = frase.charAt(i); 

       switch(current) 
       { 

        case 0xe1: 
         System.out.println("contiene la á: '"+frase+"'"); 
         frase = frase.replace((char) 0xe1, (char) 0x14); 
         System.out.println("nova frase: "+frase); 
         break; 

        case 0xe9: 
         System.out.println("contiene la é: '"+frase+"'"); 
         frase = frase.replace((char) 0xe9, (char) 0x15); 
         System.out.println("nova frase: "+frase); 
         break; 

        case 0xf3: 
         System.out.println("contiene la ó: '"+frase+"'"); 
         frase = frase.replace((char) 0xf3, (char) 0x16); 
         System.out.println("nova frase: "+frase); 
         break; 

         //... outros/others 

        default: 
         break; 
       } 


      } 

      try{ 

       out.write(frase); 
       out.newLine(); 

      }catch(IOException e){ 
       e.printStackTrace(); 
      } 
     } 
     archivo.close(); 
     out.close(); 

    } 
} 

希望を持つTXT」このことができます!

+1

こんにちは、 あなたのコードが正しく動作します、ありがとうございました ご挨拶。 –

+0

@RaúlPuro "Accepted"と答えることができますか? =) – HenriqueMS

+1

Tom BlodgetのソリューションとTom Blodgetのソリューションは良いですが、Tom Blodgetの前に読んでいます。私はあなたの応答を高く評価しますが、私は2つできません。 ご挨拶。 –

関連する問題