我正在尝试使用Java中的printf()格式化发票。我希望最终结果看起来像这样。
public android.location.Location getLocation() throws IOException {
try {
mLocationManager = (LocationManager) context
.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = mLocationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = mLocationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// location service disabled
} else {
this.canGetLocation = true;
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
mLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, SIXTY_SECONDS,
0, this);
Log.d("GPS Enabled", "GPS Enabled");
if (mLocationManager != null) {
location = mLocationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//updateGPSCoordinates();
}
}
// First get location from Network Provider
if (isNetworkEnabled) {
if (location == null) {
mLocationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
SIXTY_SECONDS,
0, this);
Log.d("Network", "Network");
if (mLocationManager != null) {
location = mLocationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
//updateGPSCoordinates();
}
}
}
}
} catch (Exception e) {
// e.printStackTrace();
Log.e("Error : Location",
"Impossible to connect to LocationManager", e);
}
return location;
}
不知何故,我达到了预期的效果,但当一个项目的描述比单元格所占的空间更长时,它会将边框向右推,而不是转到新的一行。
_______________________________________
Invoice 1
24-Oct-2017
---------------------------------------
| ID | DESC | AMT |
---------------------------------------
| 1 | Item1 | 15,000|
---------------------------------------
| 2 | Item2 | 200,000|
---------------------------------------
| 3 | Enterprise Javaaaaaaa | |
| | a | 300,000|
---------------------------------------
| Sub Total 515,000|
---------------------------------------
| Tax(5%) 25,750|
---------------------------------------
| Total 540,750|
---------------------------------------
THANK YOU!
_______________________________________
这是这些行的格式字符串。
_______________________________________
Invoice 1
24-Oct-2017
---------------------------------------
| ID | DESC | AMT |
---------------------------------------
| 1 | Item1 | 15,000|
---------------------------------------
| 2 | Item2 | 200,000|
---------------------------------------
| 3 | Enterprise Javaaaaaaaaa | 300,000|
---------------------------------------
| Sub Total 515,000|
---------------------------------------
| Tax(5%) 25,750|
---------------------------------------
| Total 540,750|
---------------------------------------
THANK YOU!
_______________________________________
如何让描述自动变得比包含单元格宽度更长?
答案 0 :(得分:1)
使用%s
时,您可以指定最小宽度和最大宽度。
System.out.printf("%20.20s", someString);
这会给你一个20个字符的字符串。现在你依靠制表位。如果您希望将字符串向左对齐,请包含减号。
System.out.printf("%-20.20s", someString);
要添加新行,您必须包含一些逻辑,因为String.format不知道换行应该是什么样的。
答案 1 :(得分:1)
$ jar tvf spring-web-4.3.9.RELEASE.jar | grep RestTemplate.class
30116 Wed Jun 07 19:11:32 BST 2017 org/springframework/web/client/RestTemplate.class
(我必须承认, -20 部分来自Matt的回答)
答案 2 :(得分:0)
我认为你需要逐个字符地打印字符串,控制当前位置不超过一定的长度。
据我所知,没有可靠的机制来读取终端/ cmd大小的系统设置,但您可以将其锁定在应用的启动上。
对于Windows执行类似
的操作Process p = Runtime.getRuntime().exec("mode 100, 50");
对于MacOS:
Process p = Runtime.getRuntime().exec("resize -s 50 100");
然后在打印过程中确保每行不超过100个字符。