【问题标题】:How to have width between values?如何在值之间设置宽度?
【发布时间】:2015-08-26 02:44:23
【问题描述】:

我正在尝试解决Scala for the Impatient 中提到的问题

7. Print a table of all Java properties, like this:
     java.runtime.name             | Java(TM) SE Runtime Environment
     sun.boot.library.path         | /home/apps/jdk1.6.0_21/jre/lib/i386
     java.vm.version               | 17.0-b16
     java.vm.vendor                | Sun Microsystems Inc.
     java.vendor.url               | http://java.sun.com/
     path.separator                | :
     java.vm.name                  | Java HotSpot(TM) Server VM
     You need to find the length of the longest key before you can print the table

我的尝试看起来像

scala> import scala.collection.JavaConversions.propertiesAsScalaMap
import scala.collection.JavaConversions.propertiesAsScalaMap

scala> val props: scala.collection.Map[String, String] = System.getProperties()
props: scala.collection.Map[String,String] =
Map(env.emacs -> "", java.runtime.name -> Java(TM) SE Runtime Environment, sun.boot.library.path -> /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib, java.vm.version -> 25.51-b03, gopherProxySet -> false, java.vm.vendor -> Oracle Corporation, java.vendor.url -> http://java.oracle.com/, path.separator -> :, java.vm.name -> Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg -> sun.io, user.country -> US, sun.java.launcher -> SUN_STANDARD, sun.os.patch.level -> unknown, java.vm.specification.name -> Java Virtual Machine Specification, user.dir -> /Users/harit, java.runtime.version -> 1.8.0_51-b16, java.awt.graphicsenv -> sun.awt.CGraphicsEnvironment, java.endorsed.dirs -> /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk...

然后找出键之间的最大长度

scala> props.keys.map(_.length).max
res24: Int = 29

然后我做

scala> for ((k,v) <- props) yield printf("%s%29s\n", k, "|" + v.trim)

但我看到的不是我想要的

env.emacs                            |
java.runtime.name|Java(TM) SE Runtime Environment
sun.boot.library.path|/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib
java.vm.version                   |25.51-b03
gopherProxySet                       |false
java.vm.vendor          |Oracle Corporation
java.vendor.url     |http://java.oracle.com/
path.separator                           |:
java.vm.name|Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg                      |sun.io
user.country                          |US
sun.java.launcher                |SUN_STANDARD
sun.os.patch.level                     |unknown
java.vm.specification.name|Java Virtual Machine Specification
user.dir                |/Users/harit
java.runtime.version                |1.8.0_51-b16
java.awt.graphicsenv|sun.awt.CGraphicsEnvironment
java.endorsed.dirs|/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/endorsed
os.arch                      |x86_64
java.io.tmpdir|/var/folders/39/rrqhhzfn42bf7qcwqg2kywtr0000gn/T/
line.separator                            |
java.vm.specification.vendor          |Oracle Corporation
os.name                    |Mac OS X
sun.jnu.encoding                       |UTF-8
java.library.path|/Users/harit/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.specification.name|Java Platform API Specification
java.class.version                        |52.0
sun.management.compiler|HotSpot 64-Bit Tiered Compilers
os.version                     |10.10.4
http.nonProxyHosts|local|*.local|169.254/16|*.169.254/16
user.home                |/Users/harit
user.timezone         |America/Los_Angeles
scala.home|/usr/local/Cellar/scala/2.11.7/libexec
java.awt.printerjob|sun.lwawt.macosx.CPrinterJob
file.encoding                       |UTF-8
java.specification.version                         |1.8
scala.usejavacp                        |true
java.class.path                          |""
user.name                       |harit
java.vm.specification.version                         |1.8
sun.java.command|scala.tools.nsc.MainGenericRunner
java.home|/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre
sun.arch.data.model                          |64
user.language                          |en
java.specification.vendor          |Oracle Corporation
awt.toolkit |sun.lwawt.macosx.LWCToolkit
java.vm.info                  |mixed mode
java.version                    |1.8.0_51
java.ext.dirs|/Users/harit/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
sun.boot.class.path|/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/classes:/usr/local/Cellar/scala/2.11.7/libexec/lib/akka-actor_2.11-2.3.10.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/config-1.2.1.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/jline-2.12.1.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-actors-2.11.0.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-actors-migration_2.11-1.1.0.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-compiler.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-continuations-library_2.11-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-continuations-plugin_2.11.7-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-library.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-parser-combinators_2.11-1.0.4.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-reflect.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-swing_2.11-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-xml_2.11-1.0.4.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scalap-2.11.7.jar
java.vendor          |Oracle Corporation
file.separator                           |/
java.vendor.url.bug|http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding                  |UnicodeBig
sun.cpu.endian                      |little
socksNonProxyHosts|local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts|local|*.local|169.254/16|*.169.254/16
sun.cpu.isalist                            |
res25: Iterable[Unit] = ArrayBuffer((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ())

这有什么问题?

更新

我也试过

scala> for ((k,v) <- props) yield println(k.padTo(29-k.length, " ").mkString + "|" + v)

但没有运气

env.emacs           |
java.runtime.name|Java(TM) SE Runtime Environment
sun.boot.library.path|/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib
java.vm.version|25.51-b03
gopherProxySet |false
java.vm.vendor |Oracle Corporation
java.vendor.url|http://java.oracle.com/
path.separator |:
java.vm.name     |Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg|sun.io
user.country     |US
sun.java.launcher|SUN_STANDARD
sun.os.patch.level|unknown
java.vm.specification.name|Java Virtual Machine Specification
user.dir             |/Users/harit
java.runtime.version|1.8.0_51-b16
java.awt.graphicsenv|sun.awt.CGraphicsEnvironment
java.endorsed.dirs|/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/endorsed
os.arch               |x86_64
java.io.tmpdir |/var/folders/39/rrqhhzfn42bf7qcwqg2kywtr0000gn/T/
line.separator |

java.vm.specification.vendor|Oracle Corporation
os.name               |Mac OS X
sun.jnu.encoding|UTF-8
java.library.path|/Users/harit/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.specification.name|Java Platform API Specification
java.class.version|52.0
sun.management.compiler|HotSpot 64-Bit Tiered Compilers
os.version         |10.10.4
http.nonProxyHosts|local|*.local|169.254/16|*.169.254/16
user.home           |/Users/harit
user.timezone   |America/Los_Angeles
scala.home         |/usr/local/Cellar/scala/2.11.7/libexec
java.awt.printerjob|sun.lwawt.macosx.CPrinterJob
file.encoding   |UTF-8
java.specification.version|1.8
scala.usejavacp|true
java.class.path|""
user.name           |harit
java.vm.specification.version|1.8
sun.java.command|scala.tools.nsc.MainGenericRunner
java.home           |/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre
sun.arch.data.model|64
user.language   |en
java.specification.vendor|Oracle Corporation
awt.toolkit       |sun.lwawt.macosx.LWCToolkit
java.vm.info     |mixed mode
java.version     |1.8.0_51
java.ext.dirs   |/Users/harit/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
sun.boot.class.path|/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/classes:/usr/local/Cellar/scala/2.11.7/libexec/lib/akka-actor_2.11-2.3.10.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/config-1.2.1.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/jline-2.12.1.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-actors-2.11.0.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-actors-migration_2.11-1.1.0.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-compiler.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-continuations-library_2.11-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-continuations-plugin_2.11.7-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-library.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-parser-combinators_2.11-1.0.4.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-reflect.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-swing_2.11-1.0.2.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scala-xml_2.11-1.0.4.jar:/usr/local/Cellar/scala/2.11.7/libexec/lib/scalap-2.11.7.jar
java.vendor       |Oracle Corporation
file.separator |/
java.vendor.url.bug|http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding|UnicodeBig
sun.cpu.endian |little
socksNonProxyHosts|local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts|local|*.local|169.254/16|*.169.254/16
sun.cpu.isalist|
res41: Iterable[Unit] = ArrayBuffer((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ())

【问题讨论】:

  • k.padTo(29," ")替换k.padTo(29-k.length, " "),它应该可以工作。
  • 哇! @ymonad,你打败了我!非常感谢

标签: string scala printing format


【解决方案1】:

正如@ymonad 在评论中指出的那样,以下对我有用

scala> for ((k,v) <- props) yield println(k.padTo(29, " ").mkString + "|" + v)

【讨论】:

    【解决方案2】:

    我认为,填充的硬编码值不是一个好的解决方案。我是动态写的:

     val props: Properties = System.getProperties
      val propsScala: mutable.Map[String, String] = props.asScala
      val padding = " "
      var lenght = 0
    
      for ((k, v) <- propsScala) if (k.length > lenght) lenght = k.length else lenght
      for ((k, v) <- propsScala) println(k + padding * (lenght - k.length - 1) + "| " + v) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多