La stringa ha sia PadLeft
sia PadRight
. Ho bisogno di un riempimento sia a destra che a sinistra (giustificazione centrale). Esiste un modo standardizzato per farlo, o, meglio ancora, un modo costruito per raggiungere lo stesso obiettivo?Stringa sinistra pad e pad destra (pad centrale)
risposta
Non che io sappia. Puoi creare un metodo di estensione se vedi di usarlo molto. Supponendo che si desidera la stringa per finire nel centro, usa qualcosa come il seguente
public string PadBoth(string source, int length)
{
int spaces = length - source.Length;
int padLeft = spaces/2 + source.Length;
return source.PadLeft(padLeft).PadRight(length);
}
Per rendere questo metodo di un'estensione, farlo in questo modo:
namespace System
{
public static class StringExtensions
{
public static string PadBoth(this string str, int length)
{
int spaces = length - str.Length;
int padLeft = spaces/2 + str.Length;
return str.PadLeft(padLeft).PadRight(length);
}
}
}
Per inciso, ho appena includo le mie estensioni nel namespace di sistema: tocca a te quello che fai.
Modificato l'ultima riga per utilizzare spazi non-breaking (alt + 0160), '.PadRight (lunghezza, '');' . Ciò aiuta a mantenere la visualizzazione del padding anche se l'ambiente di visualizzazione non gradisce più spazi. – ShawnFeatherly
è anche possibile creare il proprio interno in questo modo:
public static string PadBoth(this string s, int padValue)
{
return s.PadLeft(padValue).PadRight(padValue);
}
e utilizzare il metodo PadBoth su stringa.
Prova a eseguire questo, ho la sensazione che farà la stessa cosa di pad lasciato da solo ... –
che si possa fare da soli con questo:
string test = "Wibble";
int padTo = 12;
int padSize = (padTo - test.Length)/2;
if (padSize > 0) {
test = test.Trim().PadLeft(test.Length + padSize).PadRight(test.Length + 2 * padSize);
}
Basta regolare questo a che fare con le lunghezze imbottitura dispari come richiesto e renderlo un metodo di estensione se questo rende la vita più facile.
Ecco un'implementazione personalizzata, che non richiede la ricostruzione di stringhe.
Inoltre funziona correttamente con i numeri dispari
static string PadCenter(string text, int newWidth)
{
const char filler = ' ';
int length = text.Length;
int charactersToPad = newWidth - length;
if (charactersToPad < 0) throw new ArgumentException("New width must be greater than string length.", "newWidth");
int padLeft = charactersToPad/2 + charactersToPad%2;
//add a space to the left if the string is an odd number
int padRight = charactersToPad/2;
StringBuilder resultBuilder = new StringBuilder(newWidth);
for (int i = 0; i < padLeft; i++) resultBuilder.Insert(i, filler);
for (int i = 0; i < length; i++) resultBuilder.Insert(i + padLeft, text[i]);
for (int i = newWidth - padRight; i < newWidth; i++) resultBuilder.Insert(i, filler);
return resultBuilder.ToString();
}
Ecco una versione leggermente migliorata del metodo di @ David-Colwell extension che prende anche opzionalmente un carattere di riempimento:
namespace System
{
public static class StringExtensions
{
public static string PadSides(this string str, int totalWidth, char paddingChar = ' ')
{
int padding = totalWidth - str.Length;
int padLeft = padding/2 + str.Length;
return str.PadLeft(padLeft, paddingChar).PadRight(totalWidth, paddingChar);
}
}
}
/* Output looks like this
*****Luke*****
*****Leia*****
*****Han******
**Chewbecca*** */
string result = "";
string names = "Luke,Leia,Han,Chewbecca";
string[] charA = names.Split(',');
for (int i = 0; i < charA.Length; i++)
{
int padLeft = (14 - charA[i].Length)/2;
string temp = charA[i].PadLeft(charA[i].Length + padLeft, '*');
result += temp.PadRight(14, '*') + "\n";
}
Console.WriteLine(result);
La forza non è così forte in questo ;-) – Blaatz0r
Qui un un po 'di miglioramento, penso.
namespace System
{
public static class StringExtensions
{
public static string PadCenter(this string str, int totalLength, char padChar = '\u00A0')
{
int padAmount = totalLength - str.Length;
if (padAmount <= 1)
{
if (padAmount == 1)
{
return str.PadRight(totalLength);
}
return str;
}
int padLeft = padAmount/2 + str.Length;
return str.PadLeft(padLeft).PadRight(totalLength);
}
}
}
- 1. Galleggiante pad python
- 2. Zero pad numpy array
- 3. Tensorflow Tensor rimodellamento e pad con zeri
- 4. right align/pad numbers in bash
- 5. Errore di decrittografia: blocco del pad danneggiato
- 6. blocco pad corrotto durante la decrittazione (Android)
- 7. signature pad è lento su Android
- 8. (n) pad curses in python non funziona
- 9. funzione di Decorazione Hex di zeri pad
- 10. GStreamer: come collegare i pad dinamici
- 11. Pad con zeri a larghezza comune
- 12. Xcode Numero pad con errore decimale
- 13. numeri pad varchar con 0s in db2
- 14. Matrice di pad con zeri apertiCV
- 15. Come eliminare i pad in etherpad-lite
- 16. troncare e pad utilizzando specifiche del formato mini lingua
- 17. Come eseguire il pad con n caratteri in Python
- 18. R: ggplot: Errore: parametri sconosciuti: binwidth, bin, pad
- 19. Come posso elencare tutti i pad in Etherpad-lite
- 20. Perché il pad GCC funziona con gli NOP?
- 21. Pad una matrice di essere una certa dimensione
- 22. Che cosa rende un'applicazione web un'applicazione touch pad amichevole?
- 23. MySQL: come applicare il codice postale sul pad con "0"?
- 24. Scala - Pad un array a una certa dimensione
- 25. correttamente pad interi negativi con zeri con std :: cout
- 26. Android: esiste un modo per simulare eventi D-Pad (API 10)?
- 27. come eseguire il pad dei dati prima della crittografia con bouncyCastle
- 28. Come posso eseguire il pad di parte di una stringa con spazi, in Perl?
- 29. -pad azzerare Come variabili numeriche in zsh (? E forse anche bash)
- 30. Perché il pad string.format di Python non può essere eseguito con "\ x00"?
'Yourstring.PadLeft(). PadRight()'? –