小编Moh*_*war的帖子

在Java中构建一系列分隔项的最佳方法是什么?

在Java应用程序中工作时,我最近需要组装一个以逗号分隔的值列表,以传递给另一个Web服务,而无需事先知道有多少元素.我能想出的最好的东西是这样的:

public String appendWithDelimiter( String original, String addition, String delimiter ) {
    if ( original.equals( "" ) ) {
        return addition;
    } else {
        return original + delimiter + addition;
    }
}

String parameterString = "";
if ( condition ) parameterString = appendWithDelimiter( parameterString, "elementName", "," );
if ( anotherCondition ) parameterString = appendWithDelimiter( parameterString, "anotherElementName", "," );
Run Code Online (Sandbox Code Playgroud)

我意识到这不是特别有效,因为在整个地方都会创建字符串,但我的目的是为了清晰而不是优化.

在Ruby中,我可以做这样的事情,感觉更优雅:

parameterArray = [];
parameterArray << "elementName" if condition;
parameterArray << "anotherElementName" if anotherCondition;
parameterString = parameterArray.join(",");
Run Code Online (Sandbox Code Playgroud)

但由于Java缺少连接命令,我无法弄清楚任何等价物.

那么,在Java中执行此操作的最佳方法是什么?

java string

305
推荐指数
12
解决办法
25万
查看次数

如何从android中的文件路径获取文件名

我想从sdcard文件路径获取文件名.例如:/storage/sdcard0/DCIM/Camera/1414240995236.jpg I want get 1414240995236.jpg 我已经编写了代码来获取相同的但它无法正常工作.请帮忙.
以下是我的代码:

@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data)
{
    if ( requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {

        if ( resultCode == RESULT_OK) {

            /*********** Load Captured Image And Data Start ****************/

            String imageId = convertImageUriToFile( imageUri,CameraActivity);


            //  Create and excecute AsyncTask to load capture image

            new LoadImagesFromSDCard().execute(""+imageId);

            /*********** Load Captured Image And Data End ****************/


        } else if ( resultCode == RESULT_CANCELED) {

            Toast.makeText(this, " Picture was not taken ", Toast.LENGTH_SHORT).show();
        } …
Run Code Online (Sandbox Code Playgroud)

android android-sdcard android-camera

45
推荐指数
6
解决办法
9万
查看次数

如何在Intent服务中获取Context

这是场景:我有一个WakefulBroadcastReceiver,它可以备份到网络计算机或云端.当我知道平板电脑可以访问局域网时,它将在半夜开始运行.备份将使用存储访问框架将数据存储到由实例化WakefulBroadcastReceiver的片段"拾取"的位置和文件.所以我需要能够访问ContentResolver,为此我需要上下文.

从我对文档的所有阅读中,这就是BroadcastReceiver的用途 - 一个潜在的长期运行任务,应该在后台完成,而不会发生太多其他事情. - 像备份一样.我还没有看到任何将所有内容放在一起的例子.

如何在IntentService中获取上下文?这是接收器和调度服务的片段.

  public class BackupAlarmReceiver extends WakefulBroadcastReceiver {

    @Override
        public void onReceive(Context context, Intent intent) {

            Intent service = new Intent(context, BackupSchedulingService.class);

        startWakefulService(context, service);

        }
}

public class BackupSchedulingService extends IntentService {
    public BackupSchedulingService() {
        super("BackupSchedulingService");
    }

 @Override
    protected void onHandleIntent(Intent intent) {

        Bundle extras = intent.getExtras(); 
        // How to get the context - it was a parameter when
        // creating the new IntentService class above? 
         }
}
Run Code Online (Sandbox Code Playgroud)

示例代码几乎完全遵循Android参考手册代码:

https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html

android intentservice

41
推荐指数
3
解决办法
4万
查看次数

如何阻止Jenkins日志变得庞大?

最近我的jenkins.log开始变得非常庞大,非常快,充满了关于DNS解析的例外.我试图使用logrotate,但是日志文件增长太快甚至不能旋转,只是占用了我所有的磁盘空间,这会导致各种服务失败,因为它们不能再写文件了.

我该如何避免?

jenkins

35
推荐指数
3
解决办法
1万
查看次数

如何在SpringBoot中配置CharacterEncodingFilter?

我在学习Spring Boot时遇到了一些编码问题; 我想添加像Spring 3.x这样的CharacterEncodingFilter.像这样:

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

encoding spring-boot

26
推荐指数
3
解决办法
4万
查看次数

为什么Java规范要求程序的主要方法只是无效?

虽然返回类型不是方法签名的一部分,但JVM会查找精确的声明

 public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

我的假设是,由于方法签名没有包含"返回类型",我必须允许更改返回类型.

但是,如果我将其更改为public static int main(String[] args)并返回一个值,假设为0,则JVM无法执行程序并退出并显示错误

Error: Main method must return a value of type void in class TestData, please 
define the main method as:
   public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

为什么Java规范要求主方法只是无效?当返回类型不是方法签名的一部分时,为什么会出现此限制?

这个问题与为什么java中的main()不同:这个问题是关闭的,因为它是基于意见的,而我正在寻找JVM调用此方法的代码位置/进程,以及强制它们将此方法保持为空的限制.他们采取了哪些设计决策(以及背后的推理),以及它在哪里记录.

我正在寻找事实,以便知道为什么会这样做.如果不仔细阅读问题的详细信息,请不要将其标记为重复.

PS:退出,是另一回事.我更关心该计划的进入.此外,返回的值可能不是使用JVM,而是将其限制为void可扩展性.

到目前为止,我从这个问题中学到的是:Java规范明确地修复了返回类型,以避免混淆迁移程序员(C/CPP),他们可能期望这个值返回到操作系统,但由于JVM介于此之间,因此该值永远不会返回OS.为了这个特殊目的(返回OS的值),他们提供了System.exit()方法.


对于那些建议返回类型是签名的人 - 只是尝试在类中定义以下两种方法

    public static void main(String[] a){

    }
    public static String main(String[] a){

    }
Run Code Online (Sandbox Code Playgroud)

您将收到编译错误,因为这两种方法的签名是相同的.

java jvm return-type

22
推荐指数
6
解决办法
2409
查看次数

在java控制台中打印一行(与'\n'相反)

前言

我在其他语言中看到了一些与此相关的问题,并对此进行了相当多的研究.首先,在我们开始走下兔洞之前,我必须说明我为什么这样做.我正在打印一个二叉树,我找到了一种方法来做到这一点,我认为没有其他人找到它(在网上的任何地方找不到它我永远搜索过).它解决了很多与间距和冲突有关的问题,我可能会在以后提供它作为Prettyprint Btree问题的答案.无论如何,执行上述操作的一个重要部分是能够将换行符(光标)向上移动一行.我也会安排将一个回车移动一行.

我已经对这个名为"编辑1-3"的问题进行了三次编辑.

我的特定Windows版本(可能相关):Windows 10 v1607操作系统版本:14393.2035

问题??

问题是使用ANSI转义字符很容易完成

ANSI转义码:https://en.wikipedia.org/wiki/ANSI_escape_code

使用"\ 033 [A"是我想要实现的特定代码(从有关在python中移动一行的问题得到它).

问题

所以问题解决了吗?哦不,甚至不接近.该问题是,显然窗户上挂着这个""" 精彩 '’"更新,可能有破产一切ANSI /控制台有关.下面链接到有关此问题,但具有不同的ANSI要求,但根本问题是相同的.

如何使用System.out.println在控制台中打印颜色?

tl:dr由于某些原因它不适用于Windows,你需要一个大型库来执行此操作或其他操作.

Sooo然后我尝试对更新本身做一些深入的研究,为什么这恰好是特定于Windows的(当然),我被引导到了这一点.

Windows问题的根本原因:https://github.com/Microsoft/WSL/issues/1173

tl; dr:基本上,更新更改了cmd.exe的默认设置,cmd.exe是java使用的默认控制台.更改的是如何为'子应用程序'AKA java处理ANSI代码的控制台设置(使用控制台但不是控制台本身的东西).默认值在更新之前,子应用程序继承了启用ANSI的默认控制台.现在(因为显然以前的默认设置破坏了东西)他们改变了它,以便子应用程序不从控制台继承默认设置.这意味着如果java想要启用ANSI,java必须自己有效地设置此控制台模式.显然有大量的libary用于java命令,但是有很多可用的库存有一些问题.首先他们需要maven,我不想要maven,我也不喜欢 喜欢需要一百万个额外的库来做一些非常简单的事情,它增加了我的代码依赖的东西(这很糟糕).所以我试图避免像"只使用JANSI"这样的简单解决方案setConsoleMode 对于ANSI.

我在此之后尝试过的

在我完成阅读/理解后,我尝试进入我的注册表编辑器并尝试更改控制台的默认设置(cmd.exe),以便始终为子应用程序启用ANSI(AKA java).有人在github讨论中提出过建议,但令我惊讶的是,具体设置对我来说并不存在.(它应该在计算机 - > HKEY_CUURENT_USER - >"TrimLeadingZeros"和"WindowAlpha"之间的控制台中).

试试2

由于我无法编辑控制台设置而没有大型库充满了我不想要的东西,我尝试在盒子外面思考并且在java设置中搞砸了.我发现java确切地设置了它的控制台,并发现我可以更改该设置以在java中使用不同的控制台.我最近安装了git,并且知道git bash可用,所以我尝试使用下面的问题(以及谷歌一般)作为起点.

https://superuser.com/questions/1196463/start-sh-exe-bash-with-given-path

第三次是魅力?

我无法找到合适的工作.它没有返回任何错误或做任何新的事情,就像所有.它甚至被设置为'当前项目',所以当我运行我的项目时,它应该做些不同的事情吗?我相信问题的一部分是我的根git文件夹是搞乱的(不在程序文件中).这可能是因为我使用的计算机是一台工作计算机,也许某些设置会影响安装git的位置,我不知道但我知道的是当我更改控制台时我尝试了这条路径:

C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\BIN\bash.exe

我也尝试过:

C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\bash.exe

C:\ Users \用户abbotts1 \应用程序数据\本地\程序\的Git\BIN\sh.exe

"C:\ Users\abbotts1\AppData\Local\Programs\Git\bin\sh.exe"--login -i

每次更改控制台后我都试过这段代码:

public class ExpressionEvaluator {

    public static void main(String[] args) {
        System.out.println("1"); …
Run Code Online (Sandbox Code Playgroud)

java io ansi windows-console

19
推荐指数
1
解决办法
557
查看次数

如何在绑定到DataTable的ComboBox中插入"Empty"字段

我在WinForms应用程序上有一个组合框,其中可以选择一个项目,但它不是必需的.因此,我需要一个'Empty'第一项来表示没有设置任何值.

组合框绑定到从存储过程返回的DataTable(我没有在我的UI控件上为匈牙利表示法道歉:p):

 DataTable hierarchies = _database.GetAvailableHierarchies(cmbDataDefinition.SelectedValue.ToString()).Copy();//Calls SP
 cmbHierarchies.DataSource = hierarchies;
 cmbHierarchies.ValueMember = "guid";
 cmbHierarchies.DisplayMember = "ObjectLogicalName";
Run Code Online (Sandbox Code Playgroud)

我怎么能插入这样一个空项目?

我有权更改SP,但我真的不想用UI逻辑"污染"它.

更新:这是我已经空白的DataTable.NewRow(),谢谢.我已经对你进行了修改(无论如何都是3个答案).在决定'回答'之前,我试图让迭代器模式工作

更新:我认为这个编辑让我进入了社区Wiki的土地,我决定不指定单个答案,因为它们都有其领域背景的优点.感谢您的集体投入.

c# combobox

18
推荐指数
3
解决办法
6万
查看次数

如何在运行时向Spring Security添加新用户

我通过Hibernate将用户保存在数据库表中,我使用Spring Security进行身份验证:

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.configuration.*;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }
}
Run Code Online (Sandbox Code Playgroud)

这很有效,但有一点 - 用户在服务器启动时加载.我需要编写方法RegisterUser(用户用户),在运行时将新用户添加到Spring Security.此方法应仅关注此任务.我不知道如何开始实现此功能,所以感谢任何建议!;)

Ofc用户有登录,密码,角色等等字段...

请不要使用Spring MVC发布解决方案.该系统是使用版本4.0.x中的Spring Web Boost和Spring Security Boost的RESTful应用程序

spring persistence registration spring-security maven

14
推荐指数
1
解决办法
1万
查看次数

C# - 使用自定义注释?

我创建了这个Annotation类
这个例子可能没有意义,因为它总是抛出一个异常,但我仍在使用它,因为我只是想解释我的问题是什么.我的注释永远不会因某些原因而被调用?

public class AuthenticationRequired : System.Attribute
{
   public AuthenticationRequired()
   {
      // My break point never gets hit why?
      throw new Exception("Throw this to see if annotation works or not");
   }
}

[AuthenticationRequired]
private void Window_Loaded(object sender, RoutedEventArgs e)
{
   // My break point get here
}
Run Code Online (Sandbox Code Playgroud)

c# annotations

12
推荐指数
1
解决办法
2万
查看次数