文字位置ベースのファイルを生成するには、固定長の文字列を作成する必要があります。不足している文字はスペース文字で埋める必要があります。
例として、フィールドCITYには15文字の固定長があります。入力 "Chicago"および "Rio de Janeiro"の出力は次のとおりです。
「シカゴ」 」リオデジャネイロ
Java 1.5以降では、メソッド Java.lang.String.format(String、Object ...) を使用し、printfのような形式を使用できます。
フォーマット文字列"%1$15s"
が仕事をします。 1$
は引数インデックスを示し、s
は引数が文字列であることを示し、15
は文字列の最小幅を示します。すべてをまとめる:"%1$15s"
。
一般的な方法の場合:
public static String fixedLengthString(String string, int length) {
return String.format("%1$"+length+ "s", string);
}
誰かが別のフォーマット文字列を提案して、空のスペースを特定の文字で埋めることができますか?
String.format
のスペースをスペースで埋めて、目的の文字に置き換えます。
String toPad = "Apple";
String padded = String.format("%8s", toPad).replace(' ', '0');
System.out.println(padded);
000Apple
を出力します。
更新よりパフォーマンスの高いバージョン(String.format
に依存していないため)、スペースに問題はありません(ヒントについてはRafael Borjaに送ってください)。
int width = 10;
char fill = '0';
String toPad = "New York";
String padded = new String(new char[width - toPad.length()]).replace('\0', fill) + toPad;
System.out.println(padded);
00New York
を出力します。
ただし、負の長さのchar配列を作成しないようにチェックを追加する必要があります。
このコードには、指定された文字数が正確に含まれます。右側を空白で埋めるか切り捨てます:
private String leftpad(String text, int length) {
return String.format("%" + length + "." + length + "s", text);
}
private String rightpad(String text, int length) {
return String.format("%-" + length + "." + length + "s", text);
}
以下のような簡単なメソッドを書くこともできます
public static String padString(String str, int leng) {
for (int i = str.length(); i <= leng; i++)
str += " ";
return str;
}
Guava Library には Strings.padStart があります。これは、他の多くの便利なユーティリティとともに、まさに必要なことを行います。
import org.Apache.commons.lang3.StringUtils;
String stringToPad = "10";
int maxPadLength = 10;
String paddingCharacter = " ";
StringUtils.leftPad(stringToPad, maxPadLength, paddingCharacter)
グアバよりもずっといい。 Guavaを使用する単一のエンタープライズJavaプロジェクトを見たことはありませんが、Apache String Utilsは非常に一般的です。
右パッドにはString.format("%0$-15s", str)
が必要です-符号は右パッドを行います-非左パッドを行います
ここに私の例を参照してください
入力は文字列と数字でなければなりません
入力例:Google 1
ここにきちんとしたトリックがあります:
// E.g pad("sss","00000000"); should deliver "00000sss".
public static String pad(String string, String pad) {
/*
* Add the pad to the left of string then take as many characters from the right
* that is the same length as the pad.
* This would normally mean starting my substring at
* pad.length() + string.length() - pad.length() but obviously the pad.length()'s
* cancel.
*
* 00000000sss
* ^ ----- Cut before this character - pos = 8 + 3 - 8 = 3
*/
return (pad + string).substring(string.length());
}
public static void main(String[] args) throws InterruptedException {
try {
System.out.println("Pad 'Hello' with ' ' produces: '"+pad("Hello"," ")+"'");
// Prints: Pad 'Hello' with ' ' produces: ' Hello'
} catch (Exception e) {
e.printStackTrace();
}
}
テストケースを含むコードを次に示します;):
@Test
public void testNullStringShouldReturnStringWithSpaces() throws Exception {
String fixedString = writeAtFixedLength(null, 5);
assertEquals(fixedString, " ");
}
@Test
public void testEmptyStringReturnStringWithSpaces() throws Exception {
String fixedString = writeAtFixedLength("", 5);
assertEquals(fixedString, " ");
}
@Test
public void testShortString_ReturnSameStringPlusSpaces() throws Exception {
String fixedString = writeAtFixedLength("aa", 5);
assertEquals(fixedString, "aa ");
}
@Test
public void testLongStringShouldBeCut() throws Exception {
String fixedString = writeAtFixedLength("aaaaaaaaaa", 5);
assertEquals(fixedString, "aaaaa");
}
private String writeAtFixedLength(String pString, int lenght) {
if (pString != null && !pString.isEmpty()){
return getStringAtFixedLength(pString, lenght);
}else{
return completeWithWhiteSpaces("", lenght);
}
}
private String getStringAtFixedLength(String pString, int lenght) {
if(lenght < pString.length()){
return pString.substring(0, lenght);
}else{
return completeWithWhiteSpaces(pString, lenght - pString.length());
}
}
private String completeWithWhiteSpaces(String pString, int lenght) {
for (int i=0; i<lenght; i++)
pString += " ";
return pString;
}
私はTDDが好きです;)
public static String padString(String Word, int length) {
String newWord = Word;
for(int count = Word.length(); count < length; count++) {
newWord = " " + newWord;
}
return newWord;
}