課題を開始する方法がわかりません。
ランレングス エンコーディング プログラムを作成する必要があり、
たとえば、ユーザーは次の文字列を入力します。
aaaaPPPrrrrr
に置き換えられます
4a3P5r
誰かが私がそれを始めるのを手伝ってくれますか?
課題を開始する方法がわかりません。
ランレングス エンコーディング プログラムを作成する必要があり、
たとえば、ユーザーは次の文字列を入力します。
aaaaPPPrrrrr
に置き換えられます
4a3P5r
誰かが私がそれを始めるのを手伝ってくれますか?
うまくいけば、これがあなたの割り当てを開始するのに役立ちます:
ランレングス エンコーディングの背後にある基本的な考え方は、aaaa のような連続するトークンを短い形式の 4a (「次の 4 文字は 'a'」であることを意味します) に置き換えることができるということです。このタイプのエンコーディングは、コンピュータ グラフィックスの初期の頃、画像を保存する際のスペースを節約するために使用されていました。当時、ビデオ カードは少数の色しかサポートしておらず、画像のかなりの部分で同じ色が一列に並んでいるのが一般的でした)。
ウィキペディアで詳しく読むことができます
http://en.wikipedia.org/wiki/Run-length_encoding
文字列をランレングス エンコードするために、入力文字列内の文字をループできます。同じキャラクターを連続して何回見たかをカウントするカウンターを用意します。その後、別の文字が表示されたら、カウンターの値を出力してから、数えていた文字を出力します。カウンターの値が 1 の場合 (これらの文字が連続して 1 つしか表示されないことを意味します)、カウンターの出力をスキップします。
public String runLengthEncoding(String text) {
String encodedString = "";
for (int i = 0, count = 1; i < text.length(); i++) {
if (i + 1 < text.length() && text.charAt(i) == text.charAt(i + 1))
count++;
else {
encodedString = encodedString.concat(Integer.toString(count))
.concat(Character.toString(text.charAt(i)));
count = 1;
}
}
return encodedString;
}
これを試してみてください。
これを試してください:
private static String encode(String sampleInput) {
String encodedString = null;
//get the input to a character array.
// String sampleInput = "aabbcccd";
char[] charArr = sampleInput.toCharArray();
char prev=(char)0;
int counter =1;
//compare each element with its next element and
//if same increment the counter
StringBuilder sb = new StringBuilder();
for (int i = 0; i < charArr.length; i++) {
if(i+1 < charArr.length && charArr[i] == charArr[i+1]){
counter ++;
}else {
//System.out.print(counter + Character.toString(charArr[i]));
sb.append(counter + Character.toString(charArr[i]));
counter = 1;
}
}
return sb.toString();
}
import java.util.Scanner;
/**
* @author jyotiv
*
*/
public class RunLengthEncoding {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Enter line to encode:");
Scanner s=new Scanner(System.in);
String input=s.nextLine();
int len = input.length();
int i = 0;
int noOfOccurencesForEachChar = 0;
char storeChar = input.charAt(0);
String outputString = "";
for(;i<len;i++)
{
if(i+1<len)
{
if(input.charAt(i) == input.charAt(i+1))
{
noOfOccurencesForEachChar++;
}
else
{
outputString = outputString +
Integer.toHexString(noOfOccurencesForEachChar+1) + storeChar;
noOfOccurencesForEachChar = 0;
storeChar = input.charAt(i+1);
}
}
else
{
outputString = outputString +
Integer.toHexString(noOfOccurencesForEachChar+1) + storeChar;
}
}
System.out.println("Encoded line is: " + outputString);
}
}
私はこれを試しました。それは確かに機能します。