2016-12-05 11 views
0

私はExpanding an IP addのオンラインで見たコードをコンパイルしてテストしようとしています。しかし、私がそれをコンパイルしようとすると、StringBuilderの置き換えメソッドに関するエラーが発生します。それは言う:Java - StringBuilder replace()はエラーを示します。メソッドString.replace(char、char)は適用されません

IPadd.java:52: error: no suitable method found for replace(int,int,String) 
        address.replace(tempCompressLocation,tempCompressLocation+2,":"); 
         ^
method String.replace(char,char) is not applicable 
    (actual and formal argument lists differ in length) 

私はコードの置き換えメソッドが、(int、int、String)である正しいデータ型を示していることを確認しました。私はこのプログラムをどのように動かすことができるのだろうか。

import java.util.*; 

public class IPadd { 

    public static void main (String[] args){ 

     Scanner sc = new Scanner(System.in); 

     System.out.print("Input address: "); 
     String address = sc.nextLine(); 

     // Store the location where you need add zeroes that were removed during uncompression 

     int tempCompressLocation=address.indexOf("::"); 

     //if address was compressed and zeroes were removed, remove that marker i.e "::" 
     if(tempCompressLocation!=-1){ 
      address.replace(tempCompressLocation,tempCompressLocation+2,":"); 
     } 

     //extract rest of the components by splitting them using ":" 
     String[] addressComponents=address.toString().split(":"); 

     for(int i=0;i<addressComponents.length;i++){ 
      StringBuilder uncompressedComponent=new StringBuilder(""); 
      for(int j=0;j<4-addressComponents[i].length();j++){ 

       //add a padding of the ignored zeroes during compression if required 
       uncompressedComponent.append("0"); 

      } 
      uncompressedComponent.append(addressComponents[i]); 

      //replace the compressed component with the uncompressed one 
      addressComponents[i]=uncompressedComponent.toString(); 
     } 


     //Iterate over the uncompressed address components to add the ignored "0000" components depending on position of "::" 
     ArrayList<String> uncompressedAddressComponents=new ArrayList<String>(); 

     for(int i=0;i<addressComponents.length;i++){ 
      if(i==tempCompressLocation/4){ 
       for(int j=0;j<8-addressComponents.length;j++){ 
        uncompressedAddressComponents.add("0000"); 
       } 
      } 
      uncompressedAddressComponents.add(addressComponents[i]); 

     } 

     //iterate over the uncomopressed components to append and produce a full address 
     StringBuilder uncompressedAddress=new StringBuilder(""); 
     Iterator it=uncompressedAddressComponents.iterator(); 
     while (it.hasNext()) { 
      uncompressedAddress.append(it.next().toString()); 
      uncompressedAddress.append(":"); 
     } 
     uncompressedAddress.replace(uncompressedAddress.length()-1, uncompressedAddress.length(), ""); 
     return uncompressedAddress.toString(); 
     } 

} 
+0

どのコードの 'replace()'メソッドをチェックしましたか?そのようなメソッドは 'String.'にありません。 – EJP

答えて

1

これを試してみてください。例えば

address = address.replace("::", ":");//Replace all :: with : 
address = address.replaceFirst("::", ":");//Replace first occurrence of :: with : 
+0

私は試しましたが、別のエラーが表示されます。エラー:互換性のない型:予期しない戻り値 return uncompressedAddress.toString(); – Andrew

+0

あなたは何かmainメソッドを返すので。これをSystem.out.println(uncompressedAddress.toString())でコンソールに書き出します。 return uncompressedAddress.toString()の代わりに。 –

1

私はあなたが開始文字と終了文字の間を置き換えようとしていると思います。その場合、それらの文字のインデックスを取得し、replaceメソッドで使用する必要があります。それ以外の場合は、メソッドに適用できるように文字をintにキャストする必要があります。しかし、私はそれはあなたが興味のあるものではないのですね。

int index = stringbuilder.indexOf(String.valueOf(tempCompressLocation)); 
stringbuilder.replace(index, index + 2, ":"); 

あなたは、単に特定の位置に文字を設定するためにStringbuilder#setCharAtを使用することができます。しかし、それがあなたの要件を満たすかどうかは分かりません。

すでにに記載されているように、Jobinの答えでは、Stringのメソッドが正しくありません。 StringBuilderではなくStringのreplaceメソッドを使用できます。

address.replace(tempCompressLocation, tempCompressLocation + 2, ":"); 

アドレスがStringないStringBuilder

+1

申し訳ありませんが、私は確かに..私はif文を削除すると仮定していますか?(tempCompressLocation!= - 1){ address.replace(tempCompressLocation、tempCompressLocation + 2、": " );あなたのコードに置き換えますか? – Andrew

1

あなたはStringStringBuilderクラスからメソッドを置き換える使用しようとしています..:

StringBuilder address = new StringBuilder(sc.nextLine()); 
1

String.replaceのメソッドは、2つのCharSequenceまたは2つのcharのいずれかをとります。私はあなたが文字列自体を置き換えることができると思う:

if (tempCompressLocation != -1) { 
    address.replace("::", ":"); 
} 

これはあなたの例のために働くかどうか参照してください。がんばろう!

+0

これは別のエラーを示しています:IPadd.java:94:error:互換性のない型:予期しない戻り値 return uncompressedAddress.toString(); – Andrew

+0

うん!私はそのことを忘れていました。あなたは 'void 'メソッドから戻ることはできません。最後の行: 'uncompressedAddress.toString()'を削除するか、 'uncompressedAddress'値を見たい場合に' System.out.print' ...の 'return'を変更してください。 –

関連する問題