PR

×

キーワードサーチ

▼キーワード検索

プロフィール

すぎっち28

すぎっち28

コメント新着

すぎっち28 @ Re[2]:こんにちは♪(05/11) снΙноさん >やっぱりそうですよねえ・・…
снΙно @ Re[1]:こんにちは♪(05/11) 解決してよかったです♪ 綺麗に書くのって…
すぎっち28 @ Re:こんにちは♪(05/11) снΙноさん >あ、アドバイスありがとうご…
снΙно @ こんにちは♪ グラフやった事ある! 私がやったやり方…
育児・子育て きらり @ Re:さて、これからが問題だ(10/20) こんにちわ お邪魔しました。。 …

パソコンのオンラインショッピングはこちらからどうぞ~~ instant_link.gif

2010年07月29日
XML
カテゴリ: Java
久しぶりの更新。

タイトル通り、前々からずっと実現したいと思っていた処理を、今回javaで実装してみた。

「同じ」ではなく「似たような」としたのは、PHPのpack、unpackにあるフォーマットの意味がよくわからず、完全に同じメソッドにできなかったからだ。

ってことで、ソースはこんな感じ↓

/*
* 作成日: 2010/07/29
*
* PHPのpack関数と同じような処理を行う
*/


import java.util.ArrayList;
import java.util.List;



/**
* @author sugichi28
*
* PHPのpack関数と同じような処理を行う
*/
public class StringPack {
/**
*

* 引数の16進数、もしくは10進数の文字列をアスキー文字に変換する
* 使用方法例:
*
* String result = StringPack.pack("0x12","0x34","41","42");
*
* 表示結果 4)*
*
* 上記の処理は下記でも同様
*
* String[] data = new String[4];
* data[0] = "0x12";
* data[1] = "0x34";
* data[2] = "41";
* data[3] = "42";
* String result = StringPack.pack(data);
*
*

* @param data String型の配列、またはString型の引数を列挙した形

* @return String アスキー文字に変換し、結合された文字列
*/
public static String pack(String... data){
StringBuffer sb = new StringBuffer();
for(int i = 0; i < data.length; i++){

try {
if(data[i] != null && data[i].startsWith("0x")){ // 16進数のとき
// 16進数の数値型に変換
iData = Integer.parseInt(data[i].substring(2),16);
}else{
iData = Integer.parseInt(data[i]);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
sb.append((char)iData);
}
return sb.toString();
}
/**
* int型の10進数の値を引数にするオーバーロードメソッド
* @param data int型の数値の配列
* @return String アスキー文字に変換し、結合された文字列
*/
public static String pack(int[] data){
String[] strData = new String[data.length];
for(int i = 0; i < strData.length; i++){
strData[i] = String.valueOf(data[i]);
}
return pack(strData);
}
/**
*

* 引数のASCII文字列を2進数、10進数、もしくは16進数のバイナリデータ文字列に変換し、
* String型の配列で値を返す
*
* 使用方法例:
*
* String result = StringPack.pack("0x12","0x34","41","42");
*
* *** この場合10進数の文字列に変換された配列が返される
* String[] strArray = StringPack.unpack(10, result);
*
*

* @param data アスキー文字列
*
* @return String[] 第1引数が2なら2進数、10なら10進数、16なら16進数のバイナリデータ文字列
*/
public static String[] unpack(int radix, String data){
List resultList = new ArrayList();
for(int i = 0; i < data.length(); i++){
int eachChar = data.charAt(i);
switch(radix){ // 基数ごとに処理を変える
case 2:
resultList.add(Integer.toBinaryString(eachChar));
break;
case 10:
resultList.add(String.valueOf(eachChar));
break;
case 16:
resultList.add(Integer.toHexString(eachChar));
}
}
return (String[])resultList.toArray(new String[0]);
}
}


実行サンプル↓

package exec;

import util.StringPack;

public class StringPackTest {
public static void main(String[] args) {
String result = StringPack.pack("0x12","0x34","41","42");
System.out.println(result);
int iData[] = new int[4];
iData[0] = 41;
iData[1] = 42;
System.out.println(StringPack.pack(iData));
String[] strArray = StringPack.unpack(2, result);
for(int i = 0; i < strArray.length; i++){
System.out.println(strArray[i]);
}

}
}

携帯電話アプリとかで絵文字の処理をしたりするのをjavaで実装したいときに使えるかも??

もしこのソース使いたければ、良識のあるプログラマであればメッセージ送ってください^^。

あと、こんな風にしたらもっといいんじゃない?っていう改善点を指摘してくださるとうれしいです。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2010年07月29日 11時26分07秒
コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: