2015-12-15 2 views
2

Я видел несколько таких ответов, как this one
Но ни один из них не добавляет площадку с обеих сторон заданной строки.

Пример:
str_pad, реализованный в Java

String input = "text"; 
System.out.println(add_pad(input,10,"#")); 

Выход:###text###

Что я ищу способ, который добавить площадку в обе стороны от строки и принимает в качестве аргументов строка и символ или символы для заполнения ... Возможно, что-то вроде str_pad в php.

ответ

1

полного осуществления ОРИГИНАЛА str_pad

Благодаря theINtoy пользователя ответ, и я думаю, что это было бы хорошо один (еще не тестировался),
, но я закончил реализацию полной функции str_pad php в Java langua ge, потому что все ответы, которые я нашел, имеют частичные функциональные возможности, и мне нужно больше контролировать строку, например str_pad php.

/************************** 
* 
* STR_PAD IMPLEMENTED 
* 
**************************/ 
public String str_pad(String input, int length, String pad, String sense) 
{ 
    int resto_pad = length - input.length(); 
    String padded = ""; 

    if (resto_pad <= 0){ return input; } 

    if(sense.equals("STR_PAD_RIGHT")) 
    { 
     padded = input; 
     padded += _fill_string(pad,resto_pad); 
    } 
    else if(sense.equals("STR_PAD_LEFT")) 
    { 
     padded = _fill_string(pad, resto_pad); 
     padded += input; 
    } 
    else // STR_PAD_BOTH 
    { 
     int pad_left = (int) Math.ceil(resto_pad/2); 
     int pad_right = resto_pad - pad_left; 

     padded = _fill_string(pad, pad_left); 
     padded += input; 
     padded += _fill_string(pad, pad_right); 
    } 
    return padded; 
} 


protected String _fill_string(String pad, int resto) 
{ 
    boolean first = true; 
    String padded = ""; 

    if (resto >= pad.length()) 
    { 
     for (int i = resto; i >= 0; i = i - pad.length()) 
     { 
      if (i >= pad.length()) 
      { 
       if (first){ padded = pad; } else { padded += pad; } 
      } 
      else 
      { 
       if (first){ padded = pad.substring(0, i); } else { padded += pad.substring(0, i); } 
      } 
      first = false; 
     } 
    } 
    else 
    { 
     padded = pad.substring(0,resto); 
    } 
    return padded; 
} 


ПРИМЕНЕНИЕ - Все возможные случаи тестирования
============================

System.out.println(str_pad("coca cola 100", 10, "-", "STR_PAD_RIGHT")); 
System.out.println(str_pad("coca cola", 10, "-", "STR_PAD_RIGHT")); 
System.out.println(str_pad("cocacola", 10, "-", "STR_PAD_RIGHT")); 
System.out.println(str_pad("cocacola", 10, "-", "STR_PAD_LEFT")); 
System.out.println(str_pad("cocacola", 10, "-", "STR_PAD_BOTH")); 
System.out.println(str_pad("cocacola", 15, "##", "STR_PAD_RIGHT")); 
System.out.println(str_pad("cocacola", 15, "##", "STR_PAD_LEFT")); 
System.out.println(str_pad("cocacola", 15, "##", "STR_PAD_BOTH")); 
System.out.println(str_pad("cocacola", 15, "&&&", "STR_PAD_RIGHT")); 
System.out.println(str_pad("cocacola", 15, "&&&", "STR_PAD_LEFT")); 
System.out.println(str_pad("cocacola", 15, "&&&", "STR_PAD_BOTH")); 
System.out.println(str_pad("cocacola", 20, "***", "STR_PAD_BOTH")); 
System.out.println(str_pad("cocacola", 20, "*-*", "STR_PAD_BOTH")); 
System.out.println(str_pad("cocacola_light_taste_is_not_like_original", 20, ":::", "STR_PAD_BOTH")); 

Первая и последняя Println будет печатать все символы, как сделать оригинальную функцию PHP str_pad

Выход:

System.out: coca cola 100 
System.out: coca cola- 
System.out: cocacola-- 
System.out: --cocacola 
System.out: -cocacola- 
System.out: cocacola####### 
System.out: #######cocacola 
System.out: ###cocacola#### 
System.out: cocacola&&&&&&& 
System.out: &&&&&&&cocacola 
System.out: &&&cocacola&&&& 
System.out: ******cocacola****** 
System.out: *-**-*cocacola*-**-* 
System.out: cocacola_light_taste_is_not_like_original 

Если кто-то найти какой-нибудь хороший тест или улучшение, Вы можете редактировать этот ответ для лучшего кода ...

1

Я подозреваю, что Apache Commons StringUtils придет к вам на помощь:

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#center(java.lang.String,%20int,%20char)

например

String input = "text"; 
System.out.println(StringUtils.center(input,10,"#")); 
+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow. com/q/8259), чтобы включить здесь основные части ответа и предоставить ссылку для справки. – Rizier123

+0

Спасибо, но я не могу включить библиотеку commons.apache в свое приложение по некоторым причинам безопасности ... –

Смежные вопросы