সাদা স্পেসে পূর্ণ স্থির দৈর্ঘ্যের স্ট্রিংগুলি তৈরি করুন


99

একটি অক্ষর অবস্থান ভিত্তিক ফাইল উত্পন্ন করতে আমার স্থির দৈর্ঘ্যের স্ট্রিং তৈরি করতে হবে। অনুপস্থিত অক্ষরগুলি অবশ্যই স্থানের অক্ষর দ্বারা পূর্ণ হতে হবে।

উদাহরণ হিসাবে, ক্ষেত্রের CITY এর 15 অক্ষরের একটি নির্দিষ্ট দৈর্ঘ্য রয়েছে। ইনপুটগুলির জন্য "শিকাগো" এবং "রিও ডি জেনিরো" ফলাফলগুলি রয়েছে

" শিকাগো"
"রিও ডি জেনিরো"


এটি সঠিক উত্তর stackoverflow.com/a/38110257/2642478
Xan

উত্তর:


129

জাভা ১.৫ থেকে আমরা java.lang.String.format (স্ট্রিং, অবজেক্ট ...) পদ্ধতিটি ব্যবহার করতে পারি এবং ফরম্যাটের মতো প্রিন্টফ ব্যবহার করতে পারি ।

ফর্ম্যাট স্ট্রিং "%1$15s"কাজ করে। যেখানে 1$আর্গুমেন্ট সূচকটি sনির্দেশ করে সেখানে আর্গুমেন্টটি একটি স্ট্রিং এবং 15স্ট্রিংয়ের সর্বনিম্ন প্রস্থকে উপস্থাপন করে। সবগুলোকে একত্রে রাখ: "%1$15s"

একটি সাধারণ পদ্ধতির জন্য আমাদের রয়েছে:

public static String fixedLengthString(String string, int length) {
    return String.format("%1$"+length+ "s", string);
}

হয়তো কেউ একটি নির্দিষ্ট চরিত্রের সাথে খালি স্থানগুলি পূরণ করতে অন্য ফর্ম্যাট স্ট্রিংয়ের পরামর্শ দিতে পারে?


4
Maybe someone can suggest another format string to fill the empty spaces with an specific character?- আমি যে উত্তর দিয়েছি তা একবার দেখুন।
মাইকে

5
ডকস.অরাকল.com / javase / tutorial / essential / io / formatting.html অনুসারে , 1$যুক্তি সূচি এবং 15প্রস্থ উপস্থাপন করে
দিমিত্রি মিনকভস্কি

4
এটি স্ট্রিংটির দৈর্ঘ্য 15-এ সীমাবদ্ধ করবে না এটি যদি দীর্ঘ হয় তবে উত্পাদিত আউটপুটটি 15
এরও

4
@ মিস্টারটি একটি স্ট্রিং.সুবস্ট্রিং এটিকে 15 টি অক্ষরে সীমাবদ্ধ করবে। শুভেচ্ছা
রাফায়েল বোরজা

4
হ্যাঁ, আমি এটি উল্লেখ করা উচিত ছিল। তবে আমার মন্তব্যের
মূলটিটি

56

String.formatফাঁকা জায়গাগুলির প্যাডিং ব্যবহার করুন এবং তাদের পছন্দসই চরটি প্রতিস্থাপন করুন।

String toPad = "Apple";
String padded = String.format("%8s", toPad).replace(' ', '0');
System.out.println(padded);

প্রিন্ট 000Apple


আরও পারফরম্যান্ট সংস্করণ আপডেট করুন (যেহেতু এটি নির্ভর করে না String.format), যাতে স্পেসগুলির সাথে কোনও সমস্যা নেই (ইঙ্গিতটির জন্য থেক্স থেকে রাফায়েল বোর্জা)।

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

তবে নেতিবাচক দৈর্ঘ্য সহ চর অ্যারে তৈরির প্রচেষ্টা রোধ করতে একটি চেক যুক্ত করা দরকার।


আপডেট করা কোড দুর্দান্ত কাজ করবে। যেটি আমি প্রত্যাশা করছিলাম মাইককে ধন্যবাদ
সুধরসান চন্দ্রশেকরন

28

এই কোডটিতে হুবহু প্রদত্ত পরিমাণের অক্ষর থাকবে; স্পেসে ভরা বা ডানদিকে কাটা:

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);
}

13

ডান প্যাড জন্য আপনার প্রয়োজন String.format("%0$-15s", str)

যেমন -সাইন "ডান" প্যাড এবং কোনও -চিহ্ন "বাম" প্যাড হবে না

আমার উদাহরণ এখানে দেখুন

http://pastebin.com/w6Z5QhnJ

ইনপুট অবশ্যই একটি স্ট্রিং এবং একটি সংখ্যা হতে হবে

উদাহরণ ইনপুট: গুগল 1


12

আপনি নীচের মত একটি সাধারণ পদ্ধতিও লিখতে পারেন

public static String padString(String str, int leng) {
        for (int i = str.length(); i <= leng; i++)
            str += " ";
        return str;
    }

8
এটি অবশ্যই সবচেয়ে পারফরম্যান্সের উত্তর নয়। যেহেতু জাভাতে স্ট্রিংগুলি পরিবর্তনযোগ্য নয় আপনি স্ট্রিংলাইট দৈর্ঘ্য + 1 এর সমান দৈর্ঘ্য সহ মেমরিতে মূলত এন নতুন স্ট্রিং তৈরি করছেন এবং এইভাবে এটি অত্যন্ত অপচয়যোগ্য। আরও ভাল সমাধান কেবল ইনপুট স্ট্রিংয়ের দৈর্ঘ্য নির্বিশেষে একটি স্ট্রিং কনটেনটেশন সম্পাদন করে এবং স্ট্রিংবিল্ডার বা লুপের জন্য স্ট্রিং কনটেনটেশনের আরও কিছু কার্যকর উপায় ব্যবহার করতে পারে।
anon58192932

10
import org.apache.commons.lang3.StringUtils;

String stringToPad = "10";
int maxPadLength = 10;
String paddingCharacter = " ";

StringUtils.leftPad(stringToPad, maxPadLength, paddingCharacter)

পেয়ারা ইমো থেকে ভাল উপায়। এমন একক এন্টারপ্রাইজ জাভা প্রকল্প কখনও দেখেনি যা পেয়ারা ব্যবহার করে তবে অ্যাপাচি স্ট্রিং ইউটিলস অবিশ্বাস্যরকম সাধারণ।



6

এখানে একটি ঝরঝরে কৌশল:

// 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();
  }
}


3

এখানে পরীক্ষাগুলির ক্ষেত্রে কোড রয়েছে;):

@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;
}

আমি টিডিডি পছন্দ করি;)


1

এই কোড দুর্দান্ত কাজ করে। প্রত্যাশিত আউটপুট

  String ItemNameSpacing = new String(new char[10 - masterPojos.get(i).getName().length()]).replace('\0', ' ');
  printData +=  masterPojos.get(i).getName()+ "" + ItemNameSpacing + ":   " + masterPojos.get(i).getItemQty() +" "+ masterPojos.get(i).getItemMeasure() + "\n";

শুভ কোডিং !!


0
public static String padString(String word, int length) {
    String newWord = word;
    for(int count = word.length(); count < length; count++) {
        newWord = " " + newWord;
    }
    return newWord;
}

0

এই সাধারণ ফাংশনটি আমার পক্ষে কাজ করে:

public static String leftPad(String string, int length, String pad) {
      return pad.repeat(length - string.length()) + string;
    }

প্রার্থনা:

String s = leftPad(myString, 10, "0");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.