<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mundo Geek &#187; cadenas</title>
	<atom:link href="http://mundogeek.net/etiqueta/cadenas/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Formateo de cadenas en Java</title>
		<link>http://mundogeek.net/archivos/2009/05/17/formateo-de-cadenas-en-java/</link>
		<comments>http://mundogeek.net/archivos/2009/05/17/formateo-de-cadenas-en-java/#comments</comments>
		<pubDate>Sun, 17 May 2009 08:51:16 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cadenas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[printf]]></category>
		<category><![CDATA[programacion]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=3226</guid>
		<description><![CDATA[Si has tenido algún contacto previo con C/C++ u otro lenguaje de programación puede que eches de menos un método que permita utilizar especificadores de conversión o máscaras para formatear cadenas en Java, al estilo de la función sprintf de C. Supongamos, por ejemplo, que quisiéramos mostrar en pantalla un número en coma flotante, con [...]]]></description>
			<content:encoded><![CDATA[<p>Si has tenido algún contacto previo con C/C++ u otro lenguaje de programación puede que eches de menos un método que permita utilizar especificadores de conversión o máscaras para formatear cadenas en Java, al estilo de la función <code>sprintf</code> de C.</p>
<p>Supongamos, por ejemplo, que quisiéramos mostrar en pantalla un número en coma flotante, con la peculiaridad de que necesitáramos que sólo se mostraran 2 decimales. Podríamos, por ejemplo, convertir el número en una cadena y manipularla para quedarnos con 2 caracteres después de la coma, pero existen mejores formas de lidiar con este problema.<span id="more-3226"></span></p>
<h2>String.format()</h2>
<p>La primera solución es hacer uso del método estático <code>format</code> de la clase <code>String</code> para crear una cadena que se adapte a nuestras necesidades y que más tarde imprimiremos con el consabido <code>System.out.println()</code> o <code>System.out.print()</code>.</p>
<p>Este método toma como parámetros una cadena con uno o más especificadores de conversión y una lista de argumentos. En el siguiente fragmento de código, por ejemplo, se sustituirían los especificadores <code>%s</code> por el valor de las variables <code>usuario</code> y <code>mensajes</code> respectivamente.</p>
<pre name="code" class="java">public class Ejemplo {
	public static void main(String[] args) {
		String usuario = "zootropo";
		int mensajes = 36;

		String s = String.format("%s escribió %s mensajes", usuario, mensajes);
		System.out.println(s);
	}
}</pre>
<p>Los distintos especificadores de conversión que podemos utilizar son los siguientes:</p>
<table border="1">
<tr>
<td><b>Especificador</b></td>
<td><b>Formato</b></td>
</tr>
<tr>
<td><code>%b</code></td>
<td>Booleano</td>
</tr>
<tr>
<td><code>%h</code></td>
<td>Hashcode</td>
</tr>
<tr>
<td><code>%s</code></td>
<td>Cadena</td>
</tr>
<tr>
<td><code>%c</code></td>
<td>Caracter unicode</td>
</tr>
<tr>
<td><code>%d</code></td>
<td>Entero decimal</td>
</tr>
<tr>
<td><code>%o</code></td>
<td>Entero octal</td>
</tr>
<tr>
<td><code>%x</code></td>
<td>Entero hexadecimal</td>
</tr>
<tr>
<td><code>%f</code></td>
<td>Real decimal</td>
</tr>
<tr>
<td><code>%e</code></td>
<td>Real notación científica</td>
</tr>
<tr>
<td><code>%g</code></td>
<td>Real notación científica o decimal</td>
</tr>
<tr>
<td><code>%a</code></td>
<td>Real hexadecimal con mantisa y exponente</td>
</tr>
<tr>
<td><code>%t</code></td>
<td>Fecha u hora</td>
</tr>
</table>
<p><br/></p>
<p>A estos caracteres que indican cómo se debe formatear los distintos valores de la lista de parámetros se les puede añadir caracteres opcionales siguiendo el siguiente formato:</p>
<blockquote><p>%[índice$][opciones][ancho][.precisión]conversión</p></blockquote>
<p>donde índice se puede utilizar para indicar especificamente el valor de la lista de valores por el que sustituirlo</p>
<pre name="code" class="java">public class Ejemplo {
	public static void main(String[] args) {
    int numero = 42;

    String s = String.format("%1$d en hexadecimal es %1$x", numero);
		System.out.println(s);
	}
}</pre>
<p>ancho es un entero no negativo que indica el número de caracteres mínimo que debe ocupar ese valor al mostrarse en pantalla. Si el valor tiene menos caracteres que los indicados se rellenará el vacío con espacios.</p>
<p>precisión es un entero no negativo que indica el número de decimales a utilizar para un número en coma flotante (la misma función se encarga de redondear) o el número de caracteres a mostrar para una cadena. </p>
<pre name="code" class="java">public class Ejemplo {
	public static void main(String[] args) {
		float numero = 3.14159f;

    String s = String.format("PI es %.3f", numero);
		System.out.println(s);
	}
}</pre>
<h2>System.out.printf()</h2>
<p>Pero como decíamos al principio del artículo existe otra forma más para mostrar cadenas formateadas en la consola, y es el método <code>System.out.printf()</code>. Este método funciona de forma similar a una combinación de <code>String.format()</code> y <code>System.out.print()</code> ya que podemos pasar directamente la cadena con los especificadores de conversión y la lista de argumentos para imprimirse, de forma similar a la función <code>sprintf</code> de C.</p>
<p>El fragmento de código anterior, por ejemplo, tendría este aspecto al reescribirlo con un <code>System.out.printf()</code>:</p>
<pre name="code" class="java">public class Ejemplo {
	public static void main(String[] args) {
		float numero = 3.14159f;

		System.out.printf("PI es %.3f", numero);
	}
}</pre>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushJava.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh/flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2009/05/17/formateo-de-cadenas-en-java/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Python: Revisitando objetos</title>
		<link>http://mundogeek.net/archivos/2008/03/07/python-revisitando-objetos/</link>
		<comments>http://mundogeek.net/archivos/2008/03/07/python-revisitando-objetos/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 11:46:51 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cadenas]]></category>
		<category><![CDATA[clases]]></category>
		<category><![CDATA[diccionarios]]></category>
		<category><![CDATA[listas]]></category>
		<category><![CDATA[metodos]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tuplas]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/03/07/python-revisitando-objetos/</guid>
		<description><![CDATA[En Python: Tipos básicos y Python: Tipos básicos II veíamos por primera vez algunos de los objetos del lenguaje Python: números, booleanos, cadenas de texto, diccionarios, listas y tuplas. Ahora que sabemos qué son las clases, los objetos, las funciones, y los métodos es el momento de revisitar estos objetos para descubrir su verdadero potencial. [...]]]></description>
			<content:encoded><![CDATA[<p>En <a href="http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/" title="Python: Tipos básicos">Python: Tipos básicos</a> y <a href="http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/" title="Python: Tipos básicos II">Python: Tipos básicos II</a> veíamos por primera vez algunos de los objetos del lenguaje Python: números, booleanos, cadenas de texto, diccionarios, listas y tuplas.</p>
<p>Ahora que sabemos qué son las clases, los objetos, las funciones, y los métodos es el momento de revisitar estos objetos para descubrir su verdadero potencial.</p>
<p>Veremos a continuación algunos métodos útiles de estos objetos. Evidentemente, no es necesario que los memoricéis, pero si, al menos, recordar que existen para cuando os hagan falta.<br />
<span id="more-1404"></span></p>
<h2>Diccionarios</h2>
<p><strong>D.has_key(k)</strong><br />
Comprueba si el diccionario tiene la clave <code>k</code>. Es equivalente a la sintaxis <code>k in D</code>.</p>
<p><strong>D.items()</strong><br />
Devuelve una lista de tuplas con pares clave-valor.</p>
<p><strong>D.keys()</strong><br />
Devuelve una lista de las claves del diccionario.</p>
<p><strong>D.pop(k[, d])</strong><br />
Borra la clave <code>k</code> del diccionario y devuelve su valor. Si no se encuentra dicha clave se devuelve <code>d</code> si se especificó el parámetro o bien se lanza una excepción.</p>
<p><strong>D.values()</strong><br />
Devuelve una lista de los valores del diccionario.</p>
<h2>Cadenas</h2>
<p><strong>S.count(sub[, start[, end]])</strong><br />
Devuelve el número de veces que se encuentra <code>sub</code> en la cadena. Los parámetros opcionales start y end definen una subcadena en la que buscar.</p>
<p><strong>S.find(sub[, start[, end]])</strong><br />
Devuelve la posición en la que se encontró por primera vez <code>sub</code> en la cadena o -1 si no se encontró.</p>
<p><strong>S.join(sequence)</strong><br />
Devuelve una cadena resultante de concatenar las cadenas de la secuencia <code>seq</code> separadas por nuestra cadena.</p>
<p><strong>S.partition(sep)</strong><br />
Busca el separador <code>sep</code> en la cadena y devuelve una tupla con la subcadena hasta dicho separador, el separador en si, y la subcadena del separador hasta el final de la cadena. Si no se encuentra el separador, la tupla contendrá la cadena en si y dos cadenas vacías.</p>
<p><strong>S.replace(old, new[, count])</strong><br />
Devuelve una cadena en la que se han reemplazado todas las ocurrencias de la cadena <code>old</code> por la cadena <code>new</code>. Si se especifica el parámetro <code>count</code>, este indica el número máximo de ocurrencias a reemplazar.</p>
<p><strong>S.split([sep [,maxsplit]])</strong><br />
Devuelve una lista conteniendo las subcadenas en las que se divide nuestra cadena al dividirlas por el delimitador <code>sep</code>. En el caso de que no se especifique <code>sep</code>, se usan espacios. Si se especifica <code>maxsplit</code>, este indica el número máximo de particiones a realizar.</p>
<h2>Listas</h2>
<p><strong>L.append(object)</strong><br />
Añade un objeto al final de la lista.</p>
<p><strong>L.count(value)</strong><br />
Devuelve el número de veces que se encontró <code>value</code> en la lista.</p>
<p><strong>L.extend(iterable)</strong><br />
Añade los elementos del iterable a la lista.</p>
<p><strong>L.index(value[, start[, stop]])</strong><br />
Devuelve la posición en la que se encontró la primera ocurrencia de <code>value</code>. Si se especifican, start y stop definen una sublista en la que buscar.</p>
<p><strong>L.insert(index, object)</strong><br />
Inserta el objeto <code>object</code> en la posición <code>index</code>.</p>
<p><strong>L.pop([index])</strong><br />
Devuelve el valor en la posición <code>index</code> y lo elimina de la lista. Si no se especifica la posición, se utiliza el último elemento de la lista.</p>
<p><strong>L.remove(value)</strong><br />
Eliminar la primera ocurrencia de <code>value</code> en la lista.</p>
<p><strong>L.reverse()</strong><br />
Invierte la lista. Esta función trabaja sobre la propia lista desde la que se invoca el método, no sobre una copia.</p>
<p><strong>L.sort(cmp=None, key=None, reverse=False)</strong><br />
Ordena la lista. Si se especifica <code>cmp</code>, este debe ser una función que tome como parámetro dos valores <code>x</code> e <code>y</code> de la lista y devuelva -1 si <code>x</code> es menor que <code>y</code>, 0 si son iguales y 1 si <code>x</code> es mayor que <code>y</code>.</p>
<p>El parámetro <code>reverse</code> es un booleano que indica si se debe ordenar la lista de forma inversa, lo que sería equivalente a llamar primero a <code>L.sort()</code> y después a <code>L.reverse()</code>.</p>
<p>Por último, si se especifica, el parámetro <code>key</code> debe ser una función que tome un elemento de la lista y devuelva una clave a utilizar a la hora de comparar, en lugar del elemento en si.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/03/07/python-revisitando-objetos/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

