using static System.Console;
public class Test {
public static void Main() {
const int MaxTamanhoEndereco = 30;
WriteLine(TrimPosition("Rua Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition("Av Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition("R Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition(" Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition("Aventureiros Afortunados, 12345", MaxTamanhoEndereco));
WriteLine(TrimPosition("Aventureiros Afortunados, 1234", MaxTamanhoEndereco));
}
static string TrimPosition(string texto, int limite) {
if (texto.Length > limite) {
var lastChar = texto[limite - 3];
var isSpecial = lastChar == ' ' || lastChar == '.' || lastChar == ',';
texto = texto.Substring(0, limite - 3);
var posicaoUltimoEspaco = texto.LastIndexOf(' ');
if (posicaoUltimoEspaco > 0 && !isSpecial) texto = texto.Substring(0, posicaoUltimoEspaco);
texto += "...";
}
return texto;
}
}
//https://pt.stackoverflow.com/q/114959/101
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwoKcHVibGljIGNsYXNzIFRlc3QgewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKSB7CgkJY29uc3QgaW50IE1heFRhbWFuaG9FbmRlcmVjbyA9IDMwOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIlJ1YSBBdmVudHVyZWlyb3MgQWZvcnR1bmFkb3MsIDEyMzQ1IiwgTWF4VGFtYW5ob0VuZGVyZWNvKSk7CgkJV3JpdGVMaW5lKFRyaW1Qb3NpdGlvbigiQXYgQXZlbnR1cmVpcm9zIEFmb3J0dW5hZG9zLCAxMjM0NSIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIlIgQXZlbnR1cmVpcm9zIEFmb3J0dW5hZG9zLCAxMjM0NSIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIiBBdmVudHVyZWlyb3MgQWZvcnR1bmFkb3MsIDEyMzQ1IiwgTWF4VGFtYW5ob0VuZGVyZWNvKSk7CgkJV3JpdGVMaW5lKFRyaW1Qb3NpdGlvbigiQXZlbnR1cmVpcm9zIEFmb3J0dW5hZG9zLCAxMjM0NSIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJCVdyaXRlTGluZShUcmltUG9zaXRpb24oIkF2ZW50dXJlaXJvcyBBZm9ydHVuYWRvcywgMTIzNCIsIE1heFRhbWFuaG9FbmRlcmVjbykpOwoJfQoJc3RhdGljIHN0cmluZyBUcmltUG9zaXRpb24oc3RyaW5nIHRleHRvLCBpbnQgbGltaXRlKSB7CgkJaWYgKHRleHRvLkxlbmd0aCA+IGxpbWl0ZSkgewoJCQl2YXIgbGFzdENoYXIgPSB0ZXh0b1tsaW1pdGUgLSAzXTsKCQkJdmFyIGlzU3BlY2lhbCA9IGxhc3RDaGFyID09ICcgJyB8fCBsYXN0Q2hhciA9PSAnLicgfHwgbGFzdENoYXIgPT0gJywnOwoJCQl0ZXh0byA9IHRleHRvLlN1YnN0cmluZygwLCBsaW1pdGUgLSAzKTsKCQkJdmFyIHBvc2ljYW9VbHRpbW9Fc3BhY28gPSB0ZXh0by5MYXN0SW5kZXhPZignICcpOwoJCQlpZiAocG9zaWNhb1VsdGltb0VzcGFjbyA+IDAgJiYgIWlzU3BlY2lhbCkgdGV4dG8gPSB0ZXh0by5TdWJzdHJpbmcoMCwgcG9zaWNhb1VsdGltb0VzcGFjbyk7CgkJCXRleHRvICs9ICIuLi4iOwoJCX0KCQlyZXR1cm4gdGV4dG87Cgl9Cn0KCi8vaHR0cHM6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzExNDk1OS8xMDE=