8

ユーザーのカスタム設定、特に区切り文字として使用する「リストセパレーター」を尊重するCSVエクスポーターをJavaで作成しています。

Windowsでは、このリスト区切り文字をで設定できます

Control Panel -> Regional and Language Options -> Regional Options -> Customize

他のオペレーティングシステムについてはわかりませんが、他のOSでも変更できると確信しています。

このカスタム設定をOSからJavaに取り込むための最良の方法は何ですか?私はEclipseRCP環境にいるので、何か利用できるものがあれば、RCP関連のソリューションを使用する可能性があります。

4

7 に答える 7

6

この回答のコメントから:

OS固有の設定を読むことは、私満たさなければならない必要があります。

では、Windows 以外の OSにそのような設定がない場合はどうでしょうか。

Windows のレジストリから読み取ることをお勧めします (ここで言及されているように): Read/write to Windows Registry using Java。他のプラットフォームでは適切なデフォルトを使用してください。おそらく、少なくとも Unix では、カスタム環境変数を介した構成もサポートしています (よく文書化されています): How can my Java code read OS environment variables? .

もちろん、OSには(システム全体またはユーザー固有の)「リストセパレーター」設定が普遍的にないという私の直感は間違っているかもしれませんが、それは疑わしいです。

于 2009-05-08T09:54:15.163 に答える
6

プラットフォーム固有のソリューションに頼らずに、ユーザーが独自のアプリケーション内でリストセパレーターの設定を指定できるようにするのが最善の方法だと思います。環境設定パネル、エクスポート時のダイアログ ボックス、またはオプションのコマンド ライン引数のいずれかで。

于 2009-05-08T08:03:41.483 に答える
5

アプリケーションでユーザーに独自のオプションを提供することに加えて、リストの区切りが何であるかを推測することができます。

Windows のいくつかのロケールを調べたところ、リストの区切り記号が「;」のいずれかであることがわかりました。また "、"。あいまいな場所に別のキャラクターがいると聞いたことがありますが、自分で見たことはありません. したがって、両方の「;」を処理するコードを作成できる場合 および "," をリスト セパレータとして使用すると、ほとんどの場合に対応できます。

また、"," が小数点記号として使用されている場合、"," はリスト区切り記号として使用されないように見えます。そうしないと、リストで数字を区別することが不可能になると思います。1、2、3、4 は 1.2、3.4 または 1、2.3 のいずれかになります。リスト区切りとして使用されます。残念ながら、その逆は当てはまりません。アラビア語には「.」があります。小数点記号および「;」として リスト区切りとして。

したがって、合理的に安全に従うことができるルールは次のとおりだと思います。

if (decimalSeparator == ',') 
    then listSeparator = ';'
else if (decimalSeparator == '.') 
    then listSeparator = new char[] {';', ','}
于 2010-11-29T11:45:24.687 に答える
2

好奇心から、このトピックについて少し調べてみましたが、実際、Java にはすぐに使えるような概念はないようです。

Locales Demoは、ロケール設定のかなり完全なリストを提供し、そこにはリストの区切り記号はありません。

非公開で非推奨の sun.text.resources パッケージに関するフォーラムの質問を見ました。このパッケージへの他の参照はあまり見つかりません。これは jre/lib/ext/localedata.jar にあるように見えますが、このパッケージの最近のコピーには主にアジアのロケールがリストされています。

上記のアドバイスは適切です。または、ロケールごとにプライベート リストを調査して使用することもできます。おそらく、ロケール設定のかなり大きなリストを持っているように見えるIBMのICUライブラリ(私が思うにC言語)を見るでしょう。コメントによると ICU 自体は ISO 規格から情報を取得しており、主要な情報提供者として調査する必要があります。

于 2009-05-08T10:16:13.253 に答える
1

私は同じ問題に直面し、唯一の適切な解決策は、ユーザーが「選択した区切り文字」を指定する方法を提供することであることがわかりました。

ただし、それが不可能な場合、私の場合のように、クロスプラットフォーム、クロスロケールのサポートに最も近いものは次のとおりです。

  • DecimalFormatSymbols を使用して、使用する必要があるセパレーターを推測します
  • CSV の先頭に、たとえば "sep=," (引用符なし) を含む行を追加します。これにより、推測したリストの区切り記号を指定する必要があります。

これにより、少なくともほとんどの場合 (私がテストしたケース)、「間違っていると推測した」場合でも、Excel にその区切り文字を使用させ、少なくとももう少し互換性を提供します。

于 2015-12-16T15:35:07.697 に答える
-1

Windows の場合、次のレジストリに保存されます。

"HKEY_CURRENT_USER\\Control Panel\\International"

だからあなたはこのようなものを使うことができます

private void setDelimiterProperties(String delimiter) {
    Properties p = new Properties();
    String key = "HKEY_CURRENT_USER\\Control Panel\\International\\sList";
    p.setProperty(key, delimiter);
}
于 2009-05-08T07:38:48.127 に答える